LINQ聚合查询

时间:2014-11-26 00:04:46

标签: c# linq-to-sql

我试图通过via显示来自数据库的结果,其中包含来自同一个表的聚合值。 我有一个名称,分数和回合的表格,其中包含每个特定回合的玩家姓名和分数。我希望在一个网格中显示它(比如我选择第5轮),但我也希望显示每个玩家的等级,这是他们在所有回合中包括所选回合的总得分。

到目前为止,我有两个查询 - 一个返回一个名单的列表和他们的总分数的总和,另一个检索他们的名字,特定回合的得分。 我只需要总和的索引来获得排名,我不需要得分本身的总和。 我试图在第二个查询中包含第一个查询,例如

Rank = r1.FindIndex(r => r.Name == tr.Name)

但我一直收到错误 ' LINQ to Entities无法识别方法' Int32 FindIndex'。 我知道为什么我会得到这个(它不能被编译成SQL),但我无法弄清楚如何绕过它。 那么,我如何构建我的查询,以便它从表中获取我需要的行,但也考虑正确的排名因素,即第一个查询中的玩家索引? 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果要在内存中运行查询,请使用IEnumerable表单而不是IQueryable表单。使用Linq干净地完成此操作的方法是.AsEnumerable()

Rank = r1.AsEnumerable().FindIndex(r => r.Name == tr.Name);

请注意,仅当编译时类型为AsEnumerable()时才需要调用IQueryable。由于我们讨论的是扩展方法,因此它们将根据运行时已知的类型正确调用 - 并且所有IEnumerable方法都使用foreachyield return模式,这将迭代SQL查询到内存

答案 1 :(得分:0)

感谢Aravol和Flaudre。最后,简单地改变了数据库端的数据结构,以通过视图保存我需要的信息。实现它比尝试计算这些LINQ错误更简单。