有沒有一種方法可以將以下兩個查詢合併爲一個查詢返回兩個數字。過濾器返回兩個最大數
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);
有沒有一種方法可以將以下兩個查詢合併爲一個查詢返回兩個數字。過濾器返回兩個最大數
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);
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)};
返回
除了,你沒有使用流利的語法。怎麼樣表現呢? – ErikE
他們是同一件事。我覺得在這種情況下它以這種方式讀取更清晰,但它們之間是1x1映射。 –
根據您想要的結果,這樣的事情可能工作:
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)
});
因爲我沒有提到任何記錄外部資源,以撰寫這個答案。
您正在尋找'GroupBy(x => x.MyTypeID)'。 – CodeCaster
MyTypeID也可以是除1和2之外的其他值。 – user5415701
Yeah so'Where(x => new [] {1,2} .Contains(x.MyTypeID))。GroupBy(x => x.MyTypeID)'。 – CodeCaster