.NET: LINQ's Last()
c#, linq
Solution
Brandon has posted a solution, but it requires copying the whole list in memory.
If you just want to "transition" from database queries to in-process, you can use `AsEnumerable`:
startDate = postTimes.Take(100).AsEnumerable().Last().Value;
Having said that, you possibly do want to call ToList(), but earlier - to avoid having to execute the query once for the count, and once for the last value:
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;
}
That will execute the database query once, but only fetch the first 100 records into memory. Of course, it falls down somewhat if you were going to use `postTimes` elsewhere...
Problem
I'm new to LINQ and LINQ to SQL and don't understand what's wrong with this code. The `Excetpion.Message` I get is "Query operator 'Last' is not supported." What I'm trying to do is get the earliest `LastActivityUtc`out of the latest 100. The code follows. ``` 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; } ```