我是LINQ和LINQ to SQL的新手,并不明白这段代码有什么问题。我得到的Excetpion.Message
是
“不支持查询运算符'Last'。”
我要做的是从最新的100中获取最早的LastActivityUtc
。代码如下。
var postTimes = from post in db.Post
where post.LastActivityUtc != null
orderby post.LastActivityUtc descending
select post.LastActivityUtc;
DateTime startDate = DateTime.MinValue;
if (postTimes.Count() >= 2)
{
startDate = postTimes.Take(100).Last().Value;
}
答案 0 :(得分:20)
Brandon发布了 解决方案,但它需要将整个列表复制到内存中。
如果您只想从数据库查询“转换”到进程中,可以使用AsEnumerable
:
startDate = postTimes.Take(100).AsEnumerable().Last().Value;
话虽如此,你可能做想要调用ToList(),但是更早 - 为了避免必须为计数执行一次查询,并且为最后一个值执行一次:
var postTimes = (from post in db.Post
where post.LastActivityUtc != null
orderby post.LastActivityUtc descending
select post.LastActivityUtc).Take(100).ToList();
DateTime startDate = DateTime.MinValue;
if (postTimes.Count >= 2)
{
startDate = postTimes.Last().Value;
}
这将执行数据库查询一次,但只将前100条记录提取到内存中。当然,如果你打算在其他地方使用postTimes
,它会有所下降......
答案 1 :(得分:4)
在postTimes上调用.ToList(),然后尝试使用.Last()
startDate = postTimes.Take(100).ToList().Last().Value;