Linq,如何用聚合函数编写常规查询?

时间:2012-01-27 16:48:54

标签: linq aggregate-functions aggregate

在我的页面上,我需要显示一系列工具。

var tools = _toolRepository.GetAll()。Where(t => t.IsActive == true).OrderByDescending(t => t.PostDate).Take(50)。ToList();

我还需要显示每个工具有多少投票,我可以编写一个单独的查询来执行此操作,但这会使查询数量翻倍。

有没有办法将它们组合在一起?

这是我的数据库结构。

工具

ID

名称

ToolVote

ID

ToolId

用户ID

2 个答案:

答案 0 :(得分:0)

怎么样:

var tools = _toolRepository.GetAll().Where(t => t.IsActive == true).OrderByDescending(t => t.PostDate).Take(50).Select(tool => new { Tool = tool, votes = ToolVotes.Where(tv => tv.ToolID == tool.ToolID)} ).ToList();

答案 1 :(得分:0)

假设你有1到*的关系,你可以使用左连接。

我无法测试此查询,但它应该看起来像这样

var query = (from tool in _toolRepository.GetAll().Where(t => t.IsActive == true).OrderByDescending(t => t.PostDate).Take(50)
             join toolVote in toolVotes on tool.id equals toolVote.ToolId
             into toolsTemp
             from toolTemp in toolsTemp.DefaultIfEmpty()
             select new { Tool = tool, Count = toolTemp == null ? 0 : toolTemp.Count})
            .ToList();