如何使用Linq / Lambda编写此SQL查询?

时间:2013-05-06 11:28:38

标签: c# linq entity-framework lambda group-by

到目前为止,我只使用像(c => c.UserID == uID)之类的lambda编写简单查询,但现在我有一个更高级的SQL query。我希望使用Entity Framework来创建我创建的模型。

问题是我无法弄清楚如何在多列上使用分组,并在distinct列上执行count ObjectGUID。这是SQL Query在SQL Server管理工作室中运行时可以正常工作。

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表达式来完成?任何帮助将不胜感激

1 个答案:

答案 0 :(得分: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条件应该很容易。