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

时间:2008-11-25 00:09:16

标签: c# linq entity-framework linq-to-entities

我有一个表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;
}

但似乎不支持LastMax

有什么想法吗?

7 个答案:

答案 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)

如果您使用的是asyncawait功能,则会如下所示:

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();