Как мне получить максимальный идентификатор с помощью Linq to Entity?

84

У меня есть таблица 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;
}

но Lastи , Maxпохоже, не поддерживается.

Есть идеи?

Луч
источник

Ответы:

153

Сделай это вот так

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();
Йонас Конгслунд
источник
4
Кто-нибудь знает производительность этого решения по сравнению с решением Max (u => u.userId)?
Феликс Кейл
Я не уверен в этом, но IMHO Max более производительный, чем Order, поскольку Max равен O (n), а Sort подразумевает некоторый алгоритм для сортировки, который намного больше, чем O (n).
Луис
106

попробуй это

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 Это зависит от того, что вы на самом деле пытаетесь сделать. Это решение отвечает на вопрос (получает максимальный идентификатор), тогда как ответ Йонаса Конгслунда возвращает объект с максимальным идентификатором.
actaram 01
Самый красноречивый ответ!
Патрисия
12
var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);

когда в db нет записей, он вернет 0 без исключения.

Харша.Васвани
источник
3
r => r? .ModelId ?? 0 - ярлык в новом C #
Кшиштоф Сковронек
11

NisaPrieto

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

не будет работать, потому что MAX возвращает тот же тип переменной, что и поле, поэтому в данном случае это INT, а не объект User.

Минье Диас
источник
3

В случае , если вы используете asyncи awaitфункцию, она будет выглядеть следующим образом :

User currentUser = await db.Users.OrderByDescending(u => u.UserId).FirstOrDefaultAsync();
Пси-Эд
источник
-1

Лучший способ получить идентификатор добавленной вами сущности:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
Мишель Лозада
источник