我有一个表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
。
有什么想法吗?
答案 0 :(得分:137)
这样做
db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();
答案 1 :(得分:92)
试试这个
int intIdt = db.Users.Max(u => u.UserId);
<强>更新强>
如果没有记录,则使用上面的代码生成异常,试试这个
int? intIdt = db.Users.Max(u => (int?)u.UserId);
答案 2 :(得分:10)
NisaPrieto
Users user = bd.Users.Where(u=> u.UserAge > 21).Max(u => u.UserID);
将无效,因为MAX返回该字段所属的相同类型的变量,因此在这种情况下,INT不是User对象。
答案 3 :(得分:9)
var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);
当db中没有记录时,它将返回0,没有异常。
答案 4 :(得分:2)
如果您使用的是async
和await
功能,则会如下所示:
User currentUser = await db.Users.OrderByDescending(u => u.UserId).FirstOrDefaultAsync();
答案 5 :(得分:0)
获取您添加的实体的ID的最佳方法是:
public int InsertEntity(Entity factor)
{
Db.Entities.Add(factor);
Db.SaveChanges();
var id = factor.id;
return id;
}
答案 6 :(得分:0)
请注意,如果键是 varchar,则这些答案都不起作用,因为很容易在充满“int”的 varchar 列中使用 MAX。
在数据库中,如果一列例如“Id”在数据库 1,2,3, 110, 112, 113, 4, 5, 6 那么上面所有的答案都会返回6。
因此在您的本地数据库中一切正常,因为在开发过程中您永远不会获得超过 100 条测试记录,然后,在生产过程中的某个时刻,您会收到一张奇怪的支持票。一小时后,您会发现“max”这一行似乎由于某种原因返回了错误的密钥....
(并注意它上面没有说关键是 INT...)(如果碰巧最终出现在通用库中...)
所以使用:
Users.OrderByDescending(x=>x.Id.Length).ThenByDescending(a => a.Id).FirstOrDefault();