2

linq を使用して、mvc 4、ef5、および linq を使用して一致する猫 ID の最後の猫ステータスを見つけるにはどうすればよいですか?

例は現在正しく動作しません b/c max では、datetime のみの int、dec などは許可されません。これを、日時の各部分について、少なくとも 7 または 8 の max チェックに分割する必要があります。年、月、日、時間、分、秒、ミリ秒など...しかし、これよりも良い方法を探しています:

cat.CatStatuses = dbCat.CatStatuses.Where(catstatus => catstatus.id == catstatus.id).Where(catstatus => catstatus.date == (dbCat.CatStatuses.Max(catstatus.date)));

linq、mvc 4、およびエンティティ フレームワークでこれを行うより効率的な方法はありますか? この作業を改善するために func ステートメントを使用しようとしていました。

猫のステータスは、「横になる」、「起きる」、「うなる」、「ニャー」、「スクラッチマスター」、「よじ登る」、「食事をする」、「ネズミを捕まえる」などです。

猫ステータス日付は、ステータスが発生した日時です。

私の質問は、ef5 環境で linq を使用して最も効率的な方法で、最大猫ステータス日付までに最後の猫ステータスを取得するにはどうすればよいですか?

4

3 に答える 3

4

試す:

dbCat.CatStatuses.OrderBy(x => x.date).Last();
于 2013-07-22T18:52:26.880 に答える
1
//where the variable catStatusId contains the value of the id you want.
cat.CatStatuses = dbCat.CatStatuses.Where(catstatus => catstatus.id == catStatusId).OrderByDescending(catstatus=>catstatus.Date).FirstOrDefault();
于 2013-07-22T18:57:01.660 に答える
0

Jonni の提案は良かったのですが、選択するデータを次のように減らす必要があります。

dbCat.CatStatuses =
    dbCat.CatStatuses.Where(cs => cs.id == catStatusId)
        .OrderByDescending(cs => cs.Date)
        .Select(cs => cs.status)
        .FirstOrDefault();

これは、以下とほぼ同等です。

select top(1)
    status
from DbCat.dbo.CatStatuses cs
where cs.id == @catStatusId
order by cs.Date desc

またはおそらくもっと似ています:

select top(1)
    status
    from
    (
        select status, date
        from DbCat.dbo.CatStatuses cs
        where cs.id == @catStatusId
        order by cs.date desc
    ) x

適切なインデックスがあれば効率的です。

于 2014-06-22T19:09:08.100 に答える