2008-11-25 2 views
61

У меня есть таблица Пользователь, у которого есть столбец тонов UserID, теперь какая правильная строка Linq to Entity кода, которая вернет мне max UserID?Как получить максимальный ID с Linq для Entity?

Я пробовал:

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

    return user.UserID; 
} 

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

Любые идеи?

ответ

122

Попробуйте с

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault() 
+0

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

+0

Я не уверен в этом, но IMHO Max более эффективен, чем Order, так как Max O (n) и Sort подразумевают некоторый алгоритм сортировки, который больше, чем O (n). – Luis 2016-04-11 21:14:58

84

попробовать этот

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

Обновление:

Если запись, то не генерировать исключение, используя выше кода попробовать этот

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

Спасибо, это полезно для меня int? intIdt = db.Users.Max (u => (int?) u.UserId); – 2013-08-09 09:44:27

10

NisaPrieto

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

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

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

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

1

В случае, если вы используете функцию 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^