.NET:LINQの最後()

c# linq
.NET:LINQの最後()

私は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;
}

  10  1


ベストアンサー

Brandonは_a_ソリューションを投稿しましたが、リスト全体をメモリにコピーする必要があります。

データベースの問い合わせからインプロセスへの “遷移”をしたいだけなら、 `AsEnumerable`を使います:

startDate = postTimes.Take(100).AsEnumerable()。Last()。値。

そうは言っても、おそらく_do_はToList()を呼び出すことを望みますが、それより早く – カウントに対して1回、最後の値に対して1回クエリを実行する手間を省くために:

var postTimes =(db.Postの投稿からpost.LastActivityUtc!= null orderby post.LastActivityUtc降順select post.LastActivityUtc).Take(100).ToList();

DateTime startDate = DateTime.MinValue;

if(postTimes.Count> = 2){startDate = postTimes.Last()。値。 }

これはデータベースクエリ_once_を実行しますが、最初の100レコードだけをメモリに取得します。 もちろん、他の場所で `postTimes`を使うつもりなら、それはいくらか落ちるでしょう…​

20


postTimesで.ToList()を呼び出してから、.Last()を試してください。

startDate = postTimes.Take(100).ToList()。Last()。値。

4


タイトルとURLをコピーしました