2012-07-06 82 views
2

我想爲用戶選擇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

回答

8

最大值你可以做到這一切在一個查詢:

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

我從一個查詢表達式改變它了,因爲這是引入更多的克魯夫特 - 使用查詢表達式,他們實際上幫助可讀性,而擴展方法調用簡單的解決方案,他們更易讀。

+0

如何將值分配給UserLevelID(變量)。它只是UserLevelID = userQuery – MataHari 2012-07-06 16:16:22

+1

這個查詢的問題是聚合函數需要非空序列...並且你不能保證Where擴展方法將返回一個非空序列,所以前一個句子在執行。 LinQToEntities提供了一個「DefaultIfEmpty」擴展方法,對此非常有用:Where(...)。DefaultIfEmpty(...)。Max(...) – Luis 2016-04-11 22:20:09

+0

@Luis:如果這是所需的行爲,那麼是的。目前還不清楚在沒有結果的情況下OP究竟需要什麼。 (他們似乎很滿意這個答案...) – 2016-04-12 05:53:55

3

如何:

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

VAR最大= db.Characters.Where(O => o.UserID ==用戶名)。最大(O => 0 == NULL?0:o.LevelID) ;

當db中沒有記錄時,它將返回0,沒有例外。