這是我試圖轉換爲Linq的SQL查詢。我使用的是對象的通用列表,而不是數據表(如果相關的話)。SQL查詢到Linq GroupBy和Max
Select Max(Date), ID, Property1, Peroperty2 From List Group By ID
請幫忙。
這是我試圖轉換爲Linq的SQL查詢。我使用的是對象的通用列表,而不是數據表(如果相關的話)。SQL查詢到Linq GroupBy和Max
Select Max(Date), ID, Property1, Peroperty2 From List Group By ID
請幫忙。
雖然你的SQL是無效的Property1
和Property2
必須是你的聚集的一部分,由ID,Property1,然後Property2的順序是什麼,我相信你這個意志集團正在尋找:
from obj in List
group obj by new {obj.ID, obj.Property1, obj.Property2 } into g
select new
{
ID = g.Key.ID,
Property1 = g.Key.Property1,
Property2 = g.Key.Property2,
MaxDate = g.Max(p => p.Date)
}
這相當於:
Select Max(Date), ID, Property1, Peroperty2
From List
Group By ID, Property1, Property2
正如史蒂夫說的,如果沒有Property1等在聚合子句中,您的SQL無效。然而,它看起來像你正在試圖獲得這些'行'的數據,其中的日期等於'行'組的最大日期由Id?
的工作方式就像是:憑身份證
recs.GroupBy(r => r.Id).SelectMany(g => g.Where(r => r.Date == g.Max(a => a.Date)))
組,獲取其日期該組的最大日期匹配項目的IEnumeration,並將它們合併爲一個單一的IEnumeration - 然後可以遍歷或任何你想要的。
編輯:順便說一下,在查詢語法我能做的最好的(我花了一段時間...)是一樣的東西:
from r in recs
where r.Date ==
(from sr in recs
where sr.Id == r.Id
select sr.Date).Max()
select r;
編輯2:
這其實更像是:
recs.Where(r => r.Date == recs.Where(sr => sr.Id == r.Id).Max(a => a.Date)).Select(r => r)
用流利的語法,這看起來並不對我很好,因爲我做了第一種方式
...我真的不喜歡的查詢表達式語法,因爲我用得放心SQL這是搞笑並查詢語法應該更像SQL。
謝謝史蒂夫。並對不正確的查詢感到抱歉。但是你明確地給了我我需要的東西。 – Dave