89

我有一个表用户,它有一个身份列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

有任何想法吗?

4

7 回答 7

162

这样做

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();
于 2008-11-25T00:11:57.893 回答
113

试试这个

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

更新:

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

int? intIdt = db.Users.Max(u => (int?)u.UserId);
于 2009-03-27T14:06:33.660 回答
12
var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);

当 db 中没有记录时,它会毫无例外地返回 0。

于 2015-05-15T11:08:26.577 回答
11

尼萨普列托

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

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

于 2010-08-18T16:38:41.147 回答
3

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

User currentUser = await db.Users.OrderByDescending(u => u.UserId).FirstOrDefaultAsync();
于 2016-12-12T10:13:46.613 回答
0

请注意,如果键是 varchar,则这些答案都不起作用,因为在填充有“ints”的 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();

于 2021-02-03T01:42:59.017 回答
-1

获取您添加的实体的 id 的最佳方法是这样的:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
于 2017-04-10T19:40:12.140 回答