在linq到实体中选择最大值

Mat*_*ari 2 linq entity-framework asp.net-mvc-3

我试图为用户选择MAX LevelId值,然后将该值赋给变量.

在纯SQL中,等效的是:

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


//Check User existing Characters max level per user
Run Code Online (Sandbox Code Playgroud)

int UserLevelID = 0;

var userQuery = (from o in db.Characters
where o.UserId == UserID
      select o);
Run Code Online (Sandbox Code Playgroud)

UserLevelID = userQuery.Max(LevelID);

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

Jon*_*eet 8

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

var userLevelId = db.Characters.Where(o => o.UserID == UserID)
                               .Max(o => o.LevelID);
Run Code Online (Sandbox Code Playgroud)

我已经从一个查询表达式,因为这是引入更多的克鲁夫特改变它扔掉 - 利用查询表达式,他们实际的帮助可读性和扩展方法需要简单的解决方案,他们是更具可读性.

  • 此查询的问题是聚合函数需要非空序列...并且您无法保证Where扩展方法将返回非空序列,因此上一句在执行期间将不起作用.LinQToEntities提供了一个"DefaultIfEmpty"扩展方法,它非常适用于此目的:Where(...).DefaultIfEmpty(...).Max(...) (2认同)