[英]SQL Query to Linq GroupBy and Max
這是我要轉換為Linq的SQL查詢。 我使用的是對象的一般列表,而不是相關的DataTable。
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
正如Steve所說的,沒有聚合子句中的Property1等,您的SQL無效。 但是,在我看來,您正在嘗試獲取日期等於ID的“行”組的最大日期的那些“行”的數據?
像這樣工作:
recs.GroupBy(r => r.Id).SelectMany(g => g.Where(r => r.Date == g.Max(a => a.Date)))
按ID分組,獲取日期與該組的最大日期相匹配的項的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之類的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.