Jak uzyskać maksymalny identyfikator w Linq to Entity?


84

Mam użytkownika tabeli, który ma kolumnę tożsamości UserID, teraz jaka jest poprawna linia kodu Linq to Entity, która zwróci mi maksimum UserID?

Próbowałem:

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

    return user.UserID;
}

ale Lasti Maxnie wydają się być obsługiwane.

Jakieś pomysły?

Odpowiedzi:


153

Zrób to w ten sposób

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

4
Czy ktoś zna wydajność tego rozwiązania w porównaniu z rozwiązaniem Max (u => u.userId)?
Felix Keil

Nie jestem tego pewien, ale IMHO Max jest bardziej wydajne niż Order, ponieważ Max to O (n), a Sort implikuje jakiś algorytm sortowania, który jest znacznie większy niż O (n).
Luis

106

Spróbuj tego

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

Aktualizacja:

Jeśli nie ma rekordu, wygeneruj wyjątek za pomocą powyższego kodu, spróbuj tego

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

Dzięki, że jest to dla mnie pomocne int? intIdt = db.Users.Max (u => (int?) u.UserId);
GS Shekhawat

3
Czy to tylko ja, czy ten styl jest bardziej czytelny niż odpowiedź Jonasa Kongslunda?
BornToCode

2
@BornToCode To zależy od tego, co faktycznie próbujesz zrobić. To rozwiązanie odpowiada na pytanie (pobiera max id), podczas gdy odpowiedź Jonasa Kongslunda zwraca obiekt z max id.
actaram

Najbardziej wymowna odpowiedź!
Patricia

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

gdy nie ma żadnych rekordów w db, zwróci 0 bez wyjątku.


3
r => r? .ModelId ?? 0 - skrót w nowym C #
Krzysztof Skowronek

11

NisaPrieto

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

nie zadziała, ponieważ MAX zwraca ten sam typ zmiennej, jaką jest pole, w tym przypadku jest to INT, a nie obiekt użytkownika.


3

W przypadku korzystania z funkcji asynci awaitwyglądałoby to następująco:

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

-1

Najlepszy sposób na uzyskanie identyfikatora dodanej jednostki wygląda tak:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.