我有一个基本的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'。存在显式转换(您是否错过了演员?)
我的问题是,我不确定如何在这种情况下进行演员表演。有人可以帮帮我吗?
谢谢!
答案 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的答案,因为类型不同,你不能重复使用相同的变量。)