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

Linq,如何使用聚合函数编写常规查询?,linq,aggregate-functions,aggregate,Linq,Aggregate Functions,Aggregate,在我的页面上,我需要显示一个工具列表 var tools=_toolRepository.GetAll().Where(t=>t.IsActive==true).OrderByDescending(t=>t.PostDate).Take(50).ToList() 我还需要显示每个工具获得了多少选票,我可以编写一个单独的查询来完成这项工作,但这将使查询数量增加一倍 有没有办法把它们结合在一起 这是我的数据库结构 工具 身份证 名字 过期 工具投票 身份证 图利德 用户ID如何: var tools

在我的页面上,我需要显示一个工具列表

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

我还需要显示每个工具获得了多少选票,我可以编写一个单独的查询来完成这项工作,但这将使查询数量增加一倍

有没有办法把它们结合在一起

这是我的数据库结构

工具 身份证

名字

过期

工具投票 身份证

图利德

用户ID如何:

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到*关系,您可以使用左连接

我无法测试此查询,但它应该是这样的

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();