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





Сделай это вот так
db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();
Я не уверен в этом, но IMHO Max более производительный, чем Order, поскольку Max равен O (n), а Sort подразумевает некоторый алгоритм для сортировки, который намного больше, чем O (n).
попробуй это
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);
Это только у меня, или этот стиль более читабелен, чем ответ Джонаса Конгслунда?
@BornToCode Это зависит от того, что вы на самом деле пытаетесь сделать. Это решение отвечает на вопрос (получает максимальный идентификатор), тогда как ответ Джонаса Конгслунда возвращает объект с максимальным идентификатором.
Самый красноречивый ответ!
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#
В случае, если вы используете функцию 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 ();
Кто-нибудь знает производительность этого решения по сравнению с решением Max (u => u.userId)?