Как мне получить максимальный идентификатор с помощью 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

Самый красноречивый ответ!
Патрисия


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;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.