C# 对LINQ左外部联接的SQL查询

C# 对LINQ左外部联接的SQL查询,c#,sql,sql-server,linq,linq-to-sql,C#,Sql,Sql Server,Linq,Linq To Sql,我需要将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)

我需要将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
选择
startDate博士,
endDate博士,
求和(当我穿10号衣服,我穿20号衣服,我穿30号衣服,然后1号衣服,否则0号衣服)作为第四组,
MAX(ISNULL(me.Size,0))作为MaxSize,
求和(ISNULL(me.Size,0))作为SpaceTotal
从…起
时间间隔
左外屋与我会合
ON(从dr.startDate到dr.endDate之间的me.DateTime)
分组
startDate博士,
endDate博士
startDate博士的命令
我尝试的LINQ是:

var stats=从t开始的时间间隔 从查询中的q
其中q.DateTime>=t.startDate&&q.DateTime在按开始日期和结束日期对记录进行分组时,您没有在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);
var stats=(以时间间隔从t开始)
其中(m=>m.DateTime>=t.startDate&&m.DateTime m.Size m.startDate);

我提供的LINQ只是为了测试,我知道查询返回的列更多。您尝试过吗?是的,无法将其转换为LINQ。我不想被踢出堆栈,但为什么这么多人希望将SQL转换为LINQ,以便LINQ可以生成回SQL。LINQ涵盖了您在SQL中可以做的非常小的子集。假设您可以使用c转换此查询,也许明天您会想修改它,而linq无法处理修改。如果您拥有良好的SQL,为什么不保留它?感谢您的帮助。它无效。g.Count(m=>m.Size将“组t”交换为“组q”。它将正常工作。如果问题仍然存在,请在此处写入。不,它会给出以下消息:“对象引用未设置为对象的实例。”无法求和布尔表达式DefaultIfEmpty()返回null,这就是出现错误的原因:“对象引用未设置…”
            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);