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?

Antworten:


153

Mach das so

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

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);

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.


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.


3

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

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

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.