C# 使用between子句linq进行左连接
我有一个类似sql的查询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
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中没有显示字段。