gpt4 book ai didi

.net - 将IQueryable >转换为IQueryable

转载 作者:行者123 更新时间:2023-12-01 16:02:38 25 4
gpt4 key购买 nike

我有查询,它返回每个用户的最后一个UserBattle记录:

objectContext.UserBattles.
GroupBy(bu => bu.UserId, bu => bu).
Select(gbu => gbu.OrderByDescending(bu => bu.DateTime).First());

不幸的是,它不起作用(至少MySQL .NET Connector提供程序无法将 First转换为SQL)。作为替代,我可以用 Take(1)代替First call。但不幸的是,在这种情况下,结果将是 IQueryable<IEnumerable<UserBattle>>而不是 IQueryable<UserBattle>。有没有办法不用LINQ To Objects就可以获取 IQueryable<UserBattle>(例如,SelectMany将解决我的问题)。

最佳答案

FirstFirstOrDefaultSingleSingleOrDefault都是LINQ to Entities查询的整理方法(最后是“贪婪”运算符,导致查询执行)。

但是,仅投影(Select(...))中的支持

.NET Provider for SQL Server就是这种情况。如果您的查询甚至无法与FirstOrDefault一起使用,则很可能是MySQL .NET连接器的限制(是设计还是错误?)。

出于完整性的考虑而提及:LINQ to Entities完全不支持FirstOrDefaultLast,既不作为完成方法也不在投影中。这就是为什么您的Select表达式必须写为LastOrDefault的原因。逻辑上相同的表达式gbu => gbu.OrderByDescending(bu => bu.DateTime).FirstOrDefault()在LINQ to Object中是可能的,但在LINQ to Entities中是不可能的。

关于.net - 将IQueryable <IEnumerable <Entity >>转换为IQueryable <Entity>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953190/

25 4 0