LINQ To Entities无法识别方法Last 真?
这种局限性归结为这样一个事实,即最终它必须将该查询转换为 而sql具有SELECT TOP
(在T-sql中)但没有SELECT BottOM
(没有这种东西)。
不过,有一种简单的方法,就是先 然后执行a First()
,这就是您所做的。
其他提供程序可能具有的不同实现SELECT TOP 1
,在Oracle上可能更像WHERE ROWNUM = 1
另一种效率较低的替代方法- -是.ToList()
在之前调用您的数据.Last()
,它将立即执行到那时为止已建立的LINQ To Entities Expression,然后您的.Last()将起作用,因为在那一点上,.Last().Last()
有效地执行了改为 Expression。(正如您所指出的那样,它可能会带回成千上万的记录和浪费的cpu实现对象,这些对象将永远不会被使用)
再次,我不建议您再进行此操作,但这确实有助于说明LINQ表达式执行的位置和时间之间的差异。
解决方法在此查询中:
public static IEnumerable<IServerOnlineCharacter> GetUpdated()
{
var context = DataContext.GetDataContext();
return context.ServerOnlineCharacters
.OrderBy(p => p.ServerStatus.ServerDateTime)
.GroupBy(p => p.RawName)
.Select(p => p.Last());
}
我必须将其切换为此才能工作
public static IEnumerable<IServerOnlineCharacter> GetUpdated()
{
var context = DataContext.GetDataContext();
return context.ServerOnlineCharacters
.OrderByDescending(p => p.ServerStatus.ServerDateTime)
.GroupBy(p => p.RawName)
.Select(p => p.FirstOrDefault());
}
我什p.First()
至无法使用来镜像第一个查询。
为什么在如此强大的ORM系统中会有如此基本的限制?
总结以上是真正的电脑专家为你收集整理的LINQ To Entities无法识别方法Last。真?的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。
你可能想看: