簡體   English   中英

對Linq GroupBy和Max的SQL查詢

[英]SQL Query to Linq GroupBy and Max

這是我要轉換為Linq的SQL查詢。 我使用的是對象的一般列表,而不是相關的DataTable。

Select Max(Date), ID, Property1, Peroperty2 From List Group By ID

請幫忙。

盡管您的SQL無效,因為Property1Property2必須是聚合的一部分,但這將按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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM