C# 使用between子句linq进行左连接

C# 使用between子句linq进行左连接,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我有一个类似sql的查询 select ROW_NUMBER() OVER (Order by A.WeekStartDate) as RowNum, convert(VARCHAR(12), A.WeekStartDate, 106) + ' - ' + convert(VARCHAR(12), A.WeekEndDate, 106) as Date, sum(Data1) as SumData1, sum(Data2) as SumData2, sum(Data3) as SumData

我有一个类似sql的查询

select ROW_NUMBER() OVER (Order by A.WeekStartDate) as RowNum, 
convert(VARCHAR(12), A.WeekStartDate, 106) + ' - ' + convert(VARCHAR(12), A.WeekEndDate, 106) as Date, 
sum(Data1) as SumData1, sum(Data2) as SumData2, sum(Data3) as SumData3, 
(SUM(Data1) + SUM(Data2)) as OverallSum
from dbo.Weekdays(convert(datetime, @FromDate, 103), convert(datetime, @ToDate, 103)) A
left join TableData T on convert(datetime, T.strDate, 103) between A.WeekStartDate and A.WeekEndDate
group by A.WeekStartDate, A.WeekEndDate
它的输出像

RowNum    Date               SumData1    SumData2    OverallSum
---------------------------------------------------------------
1      02/03/2015-08/03/2015  10            8          18
2      09/03/2015-05/03/2015  16            14         30
我正在把这个转换成linq。到目前为止我已经试过了

from wk in Weekdays
from cr in TableData.Where(x => DateTime.Parse(x.CreatedAt) >= DateTime.Parse(wk.WeekStartDay))
          .Where(x => DateTime.Parse(x.CreatedAt) <= DateTime.Parse(wk.WeekendDay)).DefaultIfEmpty()
          group wk by new { Weekstartday = wk.WeekStartDay, Weekendday = wk.WeekendDay } into wkgrp
          select new { RowNum = ++RNum, Day = wkgrp.Key.Weekstartday + " - " + wkgrp.Key.Weekendday };
但是,我无法访问select查询中的TableData字段以执行求和和和其他操作。我想基于TableData.date在weekstartdate和weekenddate之间左键联接两个表。如何在Linq中实现这一点

我提到了,但那里的答案只使用count where,因为我需要其他聚合函数。

尝试以下查询:

from wk in Weekdays
from cr in TableData.Where(x => DateTime.Parse(x.CreatedAt) >= DateTime.Parse(wk.WeekStartDay))
          .Where(x => DateTime.Parse(x.CreatedAt) <= DateTime.Parse(wk.WeekendDay)).DefaultIfEmpty()
          group wk by new { Weekstartday = wk.WeekStartDay, Weekendday = wk.WeekendDay } into wkgrp
          select new { RowNum = ++RNum, Day = wkgrp.Key.Weekstartday + " - " + wkgrp.Key.Weekendday, 
SumData1 = wkgrp.sum(x => x.Data1),
SumData2 = wkgrp.sum(x => x.Data2),
SumData3 = wkgrp.sum(x => x.Data3),
OverallSum = wkgrp.sum(x => x.Data1) + wkgrp.sum(x => x.Data1)
};

下面的问题对我有用。在group语句中,我必须将表名从group wk更改为group cr,然后才能访问select查询中的字段

from wk in Weekdays
from cr in TableData
where (DateTime.Parse(wk.WeekStartDay) <= DateTime.Parse(cr.CreatedAt) &&
       DateTime.Parse(wk.WeekendDay) >= DateTime.Parse(cr.CreatedAt))
group cr by new { Weekstartday = wk.WeekStartDay, Weekendday = wk.WeekendDay } into wkgrp
orderby DateTime.Parse(wkgrp.Key.Weekstartday) ascending
select new { RowNum = ++RNum, Day = wkgrp.Key.Weekstartday + " - " + wkgrp.Key.Weekendday, 
       OverallSum = wkgrp.Sum(p => p.Data1) + wkgrp.Sum(p => p.Data2), SumData1 = wkgrp.Sum(p => p.Data1), 
       SumData2 = wkgrp.Sum(p => p.Data2), SumData3 = wkgrp.Sum(p => p.Data3) }

不幸的是,伙计,我以前试过这个,但在x中没有显示字段。