我试图通过via显示来自数据库的结果,其中包括来自同一个表的聚合值。我有一个表,其中有姓名,分数和回合,其中保存球员的姓名和分数为每个特定的回合。我想在网格中显示它(比如我选择了第五轮),但我也想显示每个玩家的排名,这是他们在所有回合中的总分,包括所选的回合。
到目前为止,我有两个查询-一个返回姓名和他们的回合得分总和的列表,另一个检索他们的姓名和特定回合的得分。我只需要总和的索引来获得排名,我不需要得分本身的总和。我尝试将第一个查询包含在第二个查询中,如下所示
Rank = r1.FindIndex(r => r.Name == tr.Name)但我一直收到错误'LINQ to Entities无法识别方法'Int32 FindIndex‘。我知道为什么我会得到这个(它不能被编译成SQL),但我不知道如何绕过它。那么,我如何组织我的查询,以便它从表中获得我需要的行,并且在第一个查询中包含正确的排名,即球员的索引?有什么建议吗?
发布于 2014-11-26 08:11:56
如果希望查询在内存中运行,请使用IEnumerable表单而不是IQueryable表单。使用Linq干净利落地完成此操作的方法是.AsEnumerable()。
Rank = r1.AsEnumerable().FindIndex(r => r.Name == tr.Name);请注意,只有当编译时类型为IQueryable时,才需要调用AsEnumerable()。由于我们讨论的是扩展方法,它们将根据运行时已知的类型被正确调用-并且所有的IEnumerable方法都使用foreach和yield return模式,这将把SQL查询迭代到内存中
发布于 2014-11-28 06:27:08
感谢阿拉沃尔和弗劳德雷。最后,a简单地更改了db端的数据结构,以通过视图保存我需要的信息。这比尝试计算这些LINQ错误要简单得多。
https://stackoverflow.com/questions/27139116
复制相似问题