使用 between 子句 linq 左连接

Left join using between clause linq

我在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 的字段来执行求和和其他操作。我想在 weekstartdateweekenddate 之间基于 TableData.date 左连接两个表。这在 Linq 中如何完成?

我提到了 How do you left join using "date between" operator in 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, 
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)
};

以下查询对我有用。在组语句中,我必须将 table 名称从 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) }