如何使用Linq to Entity获得最大ID?


83

我有一个表User,该表有一个Identity列UserID,现在返回给我max的正确的Linq to Entity代码行是UserID什么?

我试过了:

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

    return user.UserID;
}

但是LastMax似乎并没有得到支持。

有任何想法吗?

Answers:


153

这样做

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

4
与Max(u => u.userId)解决方案相比,有人知道此解决方案的性能吗?
菲利克斯·基尔

我不确定,但是IMHO Max比Order性能更好,因为Max是O(n),而Sort暗示了某种排序算法,比O(n)大得多。
路易斯

104

试试这个

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

更新:

如果没有记录,则使用上面的代码生成异常,请尝试执行此操作

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

谢谢,这对我有帮助吗?intIdt = db.Users.Max(u =>(int?)u.UserId);
GS Shekhawat

3
是我自己还是这种风格比Jonas Kongslund的答案更具可读性?
BornToCode 2014年

2
@BornToCode这取决于您实际要执行的操作。此解决方案回答了问题(它获得了最大ID),而乔纳斯·孔斯隆德的答案返回了具有最大ID的对象。
actaram


11

妮莎·普列托

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

将不起作用,因为MAX返回的变量类型与字段相同,因此在这种情况下为INT而不是User对象。


3

如果使用的是asyncandawait功能,则如下所示:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.