在我的页面上,我需要显示一系列工具。
var tools = _toolRepository.GetAll()。Where(t => t.IsActive == true).OrderByDescending(t => t.PostDate).Take(50)。ToList();
我还需要显示每个工具有多少投票,我可以编写一个单独的查询来执行此操作,但这会使查询数量翻倍。
有没有办法将它们组合在一起?
这是我的数据库结构。
ID
名称
踵
ID
ToolId
用户ID
答案 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();