簡體   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