LINQ GroupBy - 无法隐式转换类型

时间:2012-02-17 14:35:52

标签: c# linq group-by

我有一个基本的LINQ查询,如下所示:

var results = from x in context.MyEntities
              where (x.CustomerName != null)
              select new Customer()
              {
                CustomerID = x.CustomerID,
                FirstName = x.FirstName,
                LastName = x.LastName,
                Gender = x.Gender,
                BirthMonth = x.BirthMonth
              };

results = results.GroupBy(x => x.Gender);
results = results.GroupBy(x => x.BirthMonth);

bool onlyShowKnownGenders = GetWhetherToShowOnlySetGenders();
if (onlyShowKnownGenders) {
  results = results.Where(x => ((x.Gender == 1) || (x.Gender == 2)));
}

如果我注释掉两个“GroupBy”行,我的代码工作正常。但是,我现在需要对结果进行分组。当我包含两个“GroupBy”行时,我收到一条错误消息:

无法隐式转换类型'System.Linq.IQueryable>'到'System.Linq.IQueryable'。存在显式转换(您是否错过了演员?)

我的问题是,我不确定如何在这种情况下进行演员表演。有人可以帮帮我吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,回答你在“在这种情况下如何进行演员表”的原始问题:答案是你不能这样做,因为你使用的是匿名类型。

您看到的错误是由于隐式输入的results变量与分组结果不兼容。试试这个:

var results1 = results.GroupBy(x => new {x.Gender, x.BirthMonth});

您也需要在分组前使用if (onlyShowKnownGenders)块,因为IQueryable生成的GroupBy群组上是IQueryable

答案 1 :(得分:1)

问题在于,在您通过呼叫组之后,请不要找回(在这种情况下)客户的可枚举数。你找回了一大群人。

一组客户没有BirthMonth属性。

你到底想做什么?

这是你想要的吗?

var results1 = results.GroupBy(x => x.Gender);
var results2 = results1.Select(group => group.GroupBy(x => x.BirthMonth));

这会在最后给你一组小组。 (我还结合了dasblinkenlight的答案,因为类型不同,你不能重复使用相同的变量。)