在linq到实体中选择最大值

时间:2012-07-06 16:11:34

标签: asp.net-mvc-3 linq entity-framework

我正在尝试为用户选择MAX LevelId值,然后将该值分配给变量。

在普通SQL中,等价物是:

SELECT        MAX(LevelID) AS MaxLevel
FROM            Character
WHERE        (UserId = 'John')


//Check User existing Characters max level per user

int UserLevelID = 0;

var userQuery = (from o in db.Characters
where o.UserId == UserID
      select o);

UserLevelID = userQuery.Max(LevelID);

这就是问题所在。我不知道如何提取levelID的最大值

3 个答案:

答案 0 :(得分:8)

您可以在一个查询中完成所有操作:

var userLevelId = db.Characters.Where(o => o.UserID == UserID)
                               .Max(o => o.LevelID);

我已经将它从一个查询表达式中改变了,因为它引入了更多残酷的使用查询表达式,它们实际上有助于提高可读性,而扩展方法则调用简单的解决方案,它们更具可读性。

答案 1 :(得分:3)

怎么样:

var theLevel = db.Characters.Where(z => z.UserId == UserID).Max(z => z.LevelID);

答案 2 :(得分:0)

var max = db.Characters.Where(o => o.UserID == UserID).Max(o => o == null?0:o.LevelID);

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