繁体   English   中英

对LINQ的SQL查询左外部联接

[英]SQL query to LINQ left outer join

我需要将SQL查询转换为LINQ的帮助。 我尝试了Linqer,但没有得到预期的结果。 这是我的SQL查询:

SELECT
    dr.startDate,
    dr.endDate,             
    SUM(CASE WHEN me.Size <= 10 THEN 1 ELSE 0 END) AS FirstGroup,
    SUM(CASE WHEN me.Size > 10 AND me.Size <= 20 THEN 1 ELSE 0 END) AS SecondGroup,
    SUM(CASE WHEN me.Size > 20 AND me.Size <= 30 THEN 1 ELSE 0 END) AS ThirdGroup,
    SUM(CASE WHEN me.Size > 30 THEN 1 ELSE 0 END) AS FourthGroup,
    MAX(ISNULL(me.Size,0)) AS MaxSize,
    SUM(ISNULL(me.Size,0)) AS SpaceTotal
FROM
    time_intervals dr
LEFT OUTER JOIN Rooms me
ON ( me.DateTime BETWEEN dr.startDate AND dr.endDate)
GROUP BY
    dr.startDate,
    dr.endDate
ORDER BY dr.startDate

我尝试的LINQ是:

var stats = from t in time_intervals
       from q in query
       where q.DateTime >= t.startDate && q.DateTime <= t.endDate
select new { Date = t.startDate, First = (q.Size <= 10), Second = (q.Size > 10 && q.Size <= 20), Third = (q.Size > 20 && q.Size <= 30), Fourth = (q.Size > 30) };

但这并没有得到与SQL查询相同的结果。

在按开始日期和结束日期对记录进行分组时,您不在LINQ中使用group关键字。 试试这个代码:

            var stats = (from t in time_intervals
                        from q in query.Where(m=> m.DateTime >= t.startDate && m.DateTime <= t.endDate).DefaultIfEmpty()
                        group q by new { t.startDate, t.endDate, q.Size } into g
                        select new
                        {
                            Date = g.Key.startDate,
                            First = g.Count(m=>m.Size <= 10)
                        }).OrderBy(m => m.startDate);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM