Asp.net mvc 3 选择linq中的最大值以创建实体

Asp.net mvc 3 选择linq中的最大值以创建实体,asp.net-mvc-3,linq,entity-framework,Asp.net Mvc 3,Linq,Entity Framework,我试图为用户选择最大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.Characte

我试图为用户选择最大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)

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

问题就在这里。我不知道如何提取levelID的最大值,您可以在一个查询中完成这一切:

var userLevelId = db.Characters.Where(o => o.UserID == UserID)
                               .Max(o => o.LevelID);
我把它从一个查询表达式改为一个查询表达式,因为它引入了更多的粗糙-使用查询表达式,它们实际上有助于可读性,而扩展方法调用简单的解决方案,它们更具可读性。

怎么样:

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

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


当数据库中没有记录时,它将毫无例外地返回0。

如何将值分配给UserLevelID(变量)。只是UserLevelID=userquery这个查询的问题是聚合函数需要非空序列。。。而且您不能保证Where扩展方法将返回一个非空序列,因此前一句话在执行期间将不起作用。LinQToEntities提供了一个非常有用的“DefaultIfEmpty”扩展方法:Where(…).DefaultIfEmpty(…).Max(…)@Luis:如果这是所需的行为,那么是的。在没有结果的情况下,OP到底想要什么还不清楚。(他们似乎对这个答案很满意……)如何在视图中发布,在foreach内部发布,或者直接打电话发布var@SAR字体恐怕我一点也不理解你的评论,但它似乎与这个问题没有特别的关系。。。