我有两个问题
var resultTypes = from res in Repo.GetAll<ResultType>()
select new
{
Name = res.DisplayName,
Count = 0
};
var qry = from res in Repo.GetAll<Result>()
group res by res.ResultType.DisplayName into g
select new
{
Name = g.Key,
Count = g.Count()
};
在我得到结果后,我必须将它们合并为1,可能使用foreach循环和新的匿名对象集合,因为显然匿名对象是不可变的。
无论如何我只能使用一个查询得到相同的结果。
如果不清楚我想做什么。我有一个Results
的集合,每个集合都有ResultType
类型的属性,我想要计算某种类型的结果数量。
我还有一个ResultType
的集合,其中一些可能还没有被任何结果使用,但我仍然只想用0个元素显示它们的名字
谢谢
答案 0 :(得分:2)
看起来你正在寻找左连接:
var query = from rt in Repo.GetAll<ResultType>()
join rj in Repo.GetAll<Result>() on rt.Id equals rj.ResultType.Id into j
from r in j.DefaultIfEmpty()
group new { rt, r } by rt.DisplayName into g
select new {
Name = g.Key,
Count = g.Where(x => x.r != null).Count()
}
我使用Id
作为加入列,您可以更改它,例如:是DisplayName
。
或者,如果您有ResultType
到Results
的导航属性,您可能只会这样做:
var query = from rt in Repo.GetAll<ResultType>()
select new {
Name = r.DisplayName,
Count = g.Results.Count()
}