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

У меня есть таблица 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 не поддерживаются.

Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
84
0
133 805
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

Кто-нибудь знает производительность этого решения по сравнению с решением Max (u => u.userId)?

Felix Keil 19.11.2015 11:36

Я не уверен в этом, но IMHO Max более производительный, чем Order, поскольку Max равен O (n), а Sort подразумевает некоторый алгоритм для сортировки, который намного больше, чем O (n).

Luis 12.04.2016 00:14

попробуй это

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

G.S. Shekhawat 09.08.2013 13:44

Это только у меня, или этот стиль более читабелен, чем ответ Джонаса Конгслунда?

BornToCode 26.11.2014 23:00

@BornToCode Это зависит от того, что вы на самом деле пытаетесь сделать. Это решение отвечает на вопрос (получает максимальный идентификатор), тогда как ответ Джонаса Конгслунда возвращает объект с максимальным идентификатором.

actaram 01.06.2016 19:38

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

Patricia 04.12.2020 23:02

NisaPrieto

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

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

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

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

r => r? .ModelId ?? 0 - ярлык в новом C#

Krzysztof Skowronek 20.11.2016 20:49

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

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

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

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}

Обратите внимание, что ни один из этих ответов не будет работать, если ключом является varchar, поскольку заманчиво использовать MAX в столбце varchar, заполненном «int».

В базе данных, если столбец, например «Идентификатор» находится в базе данных 1,2,3, 110, 112, 113, 4, 5, 6 Тогда все ответы выше вернут 6.

Таким образом, в вашей локальной базе данных все будет работать нормально, поскольку при разработке вы никогда не получите более 100 тестовых записей, а затем в какой-то момент во время производства вы получите странный тикет в службу поддержки. Затем через час вы обнаруживаете именно эту строку «max», которая, кажется, по какой-то причине возвращает неправильный ключ ....

(и обратите внимание, что нигде выше не сказано, что ключ INT ...) (и если он окажется в общей библиотеке ...)

Так что используйте:

Users.OrderByDescending (x => x.Id.Length) .ThenByDescending (a => a.Id) .FirstOrDefault ();

Другие вопросы по теме