Linq to Entityで最大IDを取得するにはどうすればよいですか?


83

ID列を持つテーブルUserがありUserIDますが、最大値を返す正しいLinq to Entityコード行はUserID何ですか?

私はもう試した:

using (MyDBEntities db = new MyDBEntities())
{
    var User = db.Users.Last();
    // or
    var User = db.Users.Max();

    return user.UserID;
}

しかしLastMaxサポートされていないようです。

何か案は?

回答:


153

このようにしてください

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();

4
Max(u => u.userId)ソリューションと比較したこのソリューションのパフォーマンスを誰かが知っていますか?
Felix Keil 2015年

よくわかりませんが、MaxはO(n)であり、SortはO(n)よりもはるかに大きいソートアルゴリズムを意味するため、IMHOMaxはOrderよりもパフォーマンスが高くなります。
ルイス

104

これを試して

int intIdt = db.Users.Max(u => u.UserId);

更新:

レコードがない場合は、上記のコードを使用して例外を生成します。これを試してください

int? intIdt = db.Users.Max(u => (int?)u.UserId);

ありがとう、それは私にとって役に立ちますか?intIdt = db.Users.Max(u =>(int?)u.UserId);
GS Shekhawat 2013

3
それは私だけですか、それともこのスタイルはJonas Kongslundの答えよりも読みやすいですか?
BornToCode 2014年

2
@BornToCodeそれはあなたが実際に何をしようとしているのかによります。このソリューションは質問に答えます(最大IDを取得します)が、JonasKongslundの答えは最大IDを持つオブジェクトを返します。
actaram 2016年

11
var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);

dbにレコードがない場合、例外なく0を返します。


3
r => r?.ModelId ?? 0-新しいC#のショートカット
Krzysztof Skowronek 2016年

11

NisaPrieto

Users user = bd.Users.Where(u=> u.UserAge > 21).Max(u => u.UserID); 

MAXはフィールドと同じタイプの変数を返すため、この場合はユーザーオブジェクトではなくINTであるため、機能しません。


3

asyncandawait機能を使用している場合、次のようになります。

User currentUser = await db.Users.OrderByDescending(u => u.UserId).FirstOrDefaultAsync();

0

追加したエンティティのIDを取得する最良の方法は次のとおりです。

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.