如何获得Linq to Entity的最大ID?

Ray*_*Ray 75 c# linq linq-to-entities entity-framework

我有一个表用户,它有一个标识列UserID,现在什么是正确的Linq to Entity代码行,它会返回最大值UserID

我试过了:

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

    return user.UserID;
}
Run Code Online (Sandbox Code Playgroud)

但似乎LastMax没有得到支持.

有任何想法吗?

Jon*_*und 143

这样做

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • 与Max(u => u.userId)解决方案相比,有人知道此解决方案的性能吗? (2认同)

小智 97

试试这个

int intIdt = db.Users.Max(u => u.UserId);
Run Code Online (Sandbox Code Playgroud)

更新:

如果没有记录然后使用上面的代码生成异常试试这个

int? intIdt = db.Users.Max(u => (int?)u.UserId);
Run Code Online (Sandbox Code Playgroud)

  • 是仅仅是我还是这种风格比Jonas Kongslund的答案更具可读性? (3认同)
  • 我更喜欢这个答案 (2认同)
  • @BornToCode这取决于你实际上要做什么.这个解决方案回答了问题(它获得了最大id),而Jonas Kongslund的答案返回了具有最大id的对象. (2认同)

小智 11

NisaPrieto

Users user = bd.Users.Where(u=> u.UserAge > 21).Max(u => u.UserID); 
Run Code Online (Sandbox Code Playgroud)

因为MAX返回与该字段相同类型的变量,所以在这种情况下是INT而不是User对象.


Har*_*ani 10

var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);
Run Code Online (Sandbox Code Playgroud)

当db中没有记录时,它将返回0,没有异常.

  • r => r?.ModelId ?? 0 - 新C#中的快捷方式 (3认同)