无论如何都要合并这两个查询EF

时间:2014-03-06 20:12:53

标签: c# linq entity-framework

我有两个问题

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个元素显示它们的名字 谢谢

1 个答案:

答案 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

或者,如果您有ResultTypeResults的导航属性,您可能只会这样做:

var query = from rt in Repo.GetAll<ResultType>()
            select new {
                Name = r.DisplayName,
                Count = g.Results.Count()
            }