2013-05-06 33 views
0

我到現在爲止只寫了使用類似(c => c.UserID == uID)等lambda的簡單查詢,但現在我有更先進的SQL query。我希望與我使用Entity Framework創建的模型運行。如何使用Linq/Lambda編寫此SQL查詢?

問題是我無法弄清楚如何在多列上使用group,並且在列ObjectGUID上也做了distinctcount。這是在SQL Server管理工作室中運行它時可正常工作的SQL查詢。

SELECT YEAR(logdate) as year, MONTH(logdate) as month, COUNT(distinct ObjectGUID) as ammount 
FROM table 
WHERE ExportTemplate = 'template' AND LogDate >= '2008-01-01 00:00:00:000' 
GROUP BY YEAR(logdate), MONTH(logdate) 
Order By YEAR(logdate), MONTH(logdate) 

把這個和linq結合起來還是都可以用lambda表達式來完成呢?任何幫助,將不勝感激

回答

2

您需要創建新的匿名類型進行分組;

from x in Model 
group by new { x.Date.Year, x.Date.Month } into g 
order by g.Key.Year, g.Key.Month 
select new 
{ 
    g.Key.Year, 
    g.Key.Month, 
    Count = g.Select(s => s.ObjectGUID).Distinct().Count() 
} 

像這樣的東西應該做的伎倆(雖然沒有測試)。添加where條件應該很容易。

+0

非常感謝。試試吧 – 2013-05-06 11:48:58

+0

我得到這個錯誤:無效的匿名類型成員聲明。匿名類型成員必須聲明爲成員分配,簡單名稱或成員訪問權限。這是針對不同的計數行 – 2013-05-06 11:58:18

+0

是的,可能是由於沒有命名的屬性 - 現在嘗試它,添加了「Count」作爲屬性名稱 – Pako 2013-05-06 12:01:52