2015-10-06 54 views
0

有沒有一種方法可以將以下兩個查詢合併爲一個查詢返回兩個數字。過濾器返回兩個最大數

var maxIDOne = mydb.GetMyData() 
        .Where(x => x.MyTypeID == 1) 
        .Max(x => x.ID); 
var maxIDTwo = mydb.GetMyData() 
        .Where(x => x.MyTypeID == 2) 
        .Max(x => x.ID); 
+0

您正在尋找'GroupBy(x => x.MyTypeID)'。 – CodeCaster

+0

MyTypeID也可以是除1和2之外的其他值。 – user5415701

+2

Yeah so'Where(x => new [] {1,2} .Contains(x.MyTypeID))。GroupBy(x => x.MyTypeID)'。 – CodeCaster

回答

0
var mydb = new[]{ 
    new MyType{ MyTypeID = 1, ID = 2}, 
    new MyType{ MyTypeID = 1, ID = 3}, 
    new MyType{ MyTypeID = 2, ID = 5}, 
    new MyType{ MyTypeID = 2, ID = 4}, 
}; 

var vals = from mt in mydb 
      where mt.MyTypeID == 1 || mt.MyTypeID == 2 
      group mt by mt.MyTypeID into g 
      select new { MyTypeId = g.Key, MaxID = g.Max(x => x.ID)}; 

返回

enter image description here

+0

除了,你沒有使用流利的語法。怎麼樣表現呢? – ErikE

+0

他們是同一件事。我覺得在這種情況下它以這種方式讀取更清晰,但它們之間是1x1映射。 –

0

根據您想要的結果,這樣的事情可能工作:

var maxIdOneAndTwo = mydb.GetMyData() 
    .Where(x => x.MyTypeID == 1 || x.MyTypeID == 2) 
    .GroupBy(d => d.MyTypeID) 
    .Select(g => new { 
     MyTypeID = g.Key, 
     MaxID = g.Max(x.ID) 
    }); 

因爲我沒有提到任何記錄外部資源,以撰寫這個答案。