C# LINQ聚合查询

C# LINQ聚合查询,c#,linq-to-sql,C#,Linq To Sql,我试图通过包含同一个表中的聚合值的via显示来自数据库的结果。 我有一张桌子,上面有名字、分数和回合,上面有每个特定回合的球员名字和分数。我想在网格中显示这一点(比如我选择了第5轮),但我还想显示每个玩家的排名,这是他们在所有轮中的总分,包括所选轮 到目前为止,我有两个查询——一个返回姓名列表和他们的轮分数之和,另一个检索他们的姓名和特定轮分数。 我只需要求和的索引就可以得到排名,我不需要分数的和。 我试图在第二个查询中包含第一个查询,比如 Rank = r1.FindIndex(r =>

我试图通过包含同一个表中的聚合值的via显示来自数据库的结果。 我有一张桌子,上面有名字、分数和回合,上面有每个特定回合的球员名字和分数。我想在网格中显示这一点(比如我选择了第5轮),但我还想显示每个玩家的排名,这是他们在所有轮中的总分,包括所选轮

到目前为止,我有两个查询——一个返回姓名列表和他们的轮分数之和,另一个检索他们的姓名和特定轮分数。 我只需要求和的索引就可以得到排名,我不需要分数的和。 我试图在第二个查询中包含第一个查询,比如

Rank = r1.FindIndex(r => r.Name == tr.Name)
但我一直在犯错误 'LINQ to Entities无法识别方法'Int32 FindIndex'。 我知道为什么会出现这种情况(它无法编译成SQL),但我不知道如何解决它。 那么,我如何构造我的查询,使它既能从表中获得我需要的行,又能在正确的排名(即第一次查询中玩家的索引)中考虑因素?
有什么建议吗?

如果希望在内存中运行查询,请使用
IEnumerable
表单而不是
IQueryable
表单。使用Linq干净地执行此操作的方法是


请注意,只有当编译时类型为
IQueryable
时,才需要调用
AsEnumerable()
。由于我们讨论的是扩展方法,因此将根据运行时已知的类型正确调用它们-所有
IEnumerable
方法都使用
foreach
yield-return
模式,这将多亏Aravol和Flaudre将SQL查询迭代到内存中。最后,a简单地更改了db端的数据结构,以通过视图保存我需要的信息。它的实现比试图找出这些LINQ错误要简单得多。

谢谢您的帮助,但这行现在说IEnumerable不包含FindIndex的定义。这是因为IEnumerable没有FindIndex()的定义。也许这可以帮助你:以防你听从Aravol的建议。
Rank = r1.AsEnumerable().FindIndex(r => r.Name == tr.Name);