Wie erhalte ich die maximale ID mit Linq to Entity?

83

Ich habe einen Tabellenbenutzer mit einer Identitätsspalte. UserIDWas ist nun die richtige Codezeile für Linq to Entity, die mir das Maximum zurückgibt UserID?

Ich habe es versucht:

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

    return user.UserID;
}

aber Lastund Maxscheinen nicht unterstützt zu werden.

Irgendwelche Ideen?

Strahl
quelle

Antworten:

153

Mach das so

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();
Jonas Kongslund
quelle
4
Kennt jemand die Leistung dieser Lösung im Vergleich zur Max-Lösung (u => u.userId)?
Felix Keil
Ich bin mir nicht sicher, aber IMHO Max ist leistungsfähiger als Order, da Max O (n) ist und Sort einen Algorithmus zum Sortieren impliziert, der viel größer als O (n) ist.
Luis
104

Versuche dies

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

Aktualisieren:

Wenn kein Datensatz vorhanden ist, generieren Sie dies mit dem obigen Code

int? intIdt = db.Users.Max(u => (int?)u.UserId);
Rikin Patel
quelle
Danke, es ist hilfreich für mich int? intIdt = db.Users.Max (u => (int?) u.UserId);
GS Shekhawat
3
Ist es nur ich oder ist dieser Stil besser lesbar als Jonas Kongslunds Antwort?
BornToCode
2
@BornToCode Es hängt davon ab, was Sie tatsächlich versuchen. Diese Lösung beantwortet die Frage (sie erhält die maximale ID), während die Antwort von Jonas Kongslund das Objekt mit der maximalen ID zurückgibt.
Actaram
11
var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);

Wenn in db keine Datensätze vorhanden sind, wird ausnahmslos 0 zurückgegeben.

Harsha.Vaswani
quelle
3
r => r? .ModelId ?? 0 - Abkürzung in neuen C #
Krzysztof Skowronek
11

NisaPrieto

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

funktioniert nicht, da MAX denselben Variablentyp zurückgibt wie das Feld. In diesem Fall handelt es sich also um ein INT und nicht um ein Benutzerobjekt.

Minyie Diaz
quelle
3

Wenn Sie die Funktion asyncund verwenden await, lautet diese wie folgt:

User currentUser = await db.Users.OrderByDescending(u => u.UserId).FirstOrDefaultAsync();
Psi-Ed
quelle
0

Der beste Weg, um die ID der von Ihnen hinzugefügten Entität zu erhalten, ist folgender:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
Michel Lozada
quelle