Як отримати максимальний ідентифікатор за допомогою Linq для організації?


83

У мене є таблиця Користувач, яка має стовпець ідентичності UserID, тепер який правильний рядок коду Linq to Entity може повернути мені максимальну кількість UserID?

Я пробував:

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

    return user.UserID;
}

але Lastі Max, схоже, не підтримується.

Будь-які ідеї?

Відповіді:


153

Робіть це так

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

4
Хтось знає ефективність цього рішення порівняно з рішенням Max (u => u.userId)?
Фелікс Кейл,

Я не впевнений у цьому, але IMHO Max є більш продуктивним, ніж Order, оскільки Max дорівнює O (n), а Sort передбачає деякий алгоритм сортування, який набагато більший за O (n).
Луїс,

104

спробуйте це

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

Оновлення:

Якщо записів немає, то згенеруйте виняток, використовуючи наведений вище код, спробуйте це

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

Дякую, це корисно для мене int? intIdt = db.Users.Max (u => (int?) u.UserId);
GS Shekhawat

3
Це лише я, або цей стиль читабельніший за відповідь Йонаса Конгслунда?
BornToCode

2
@BornToCode Це залежить від того, що ви насправді намагаєтесь зробити. Це рішення відповідає на питання (отримує максимальний ідентифікатор), тоді як відповідь Йонаса Конгслунда повертає об’єкт із максимальним ідентифікатором.
актарам


11

NisaPrieto

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

не буде працювати, тому що MAX повертає той самий тип змінної, що і поле, тому в цьому випадку це INT, а не користувацький об'єкт.


3

Якщо ви використовуєте функцію asyncта await, це буде наступним чином:

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

0

Найкращий спосіб отримати ідентифікатор сутності, яку ви додали, такий:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.