2011-02-28 65 views
2

我喜歡這個 -如何通過並剝離Linq查詢來編寫以下組?

Id Date 
1  01/03/2011 14:15:23.320 
1  01/03/2011 16:15:23.320 
1  01/03/2011 18:15:23.320 
1  01/04/2011 19:15:23.320 
2  01/03/2011 14:15:23.320 
2  01/03/2011 15:15:23.320 
2  01/03/2011 18:15:23.320 
2  01/05/2011 19:15:23.320 
2  01/07/2011 20:15:23.320 

我的期望輸出列表 -

Id Date 
1  01/03/2011 
1  01/04/2011 
2  01/03/2011 
2  01/05/2011 
2  01/07/2011 

那麼,如何通過對ID的第一列表和組只需要日期部分,實現上述結果在Linq?

回答

6

嘗試這樣:

var result = yourList.GroupBy(item => 
    new {Id = item.Id, Date = item.Date.Date}); 

基本上,DateTime.Date剝離的時間信息。

要通過的結果迴路,你可以這樣做:

foreach(var grp in result) 
{ 
    Console.WriteLine("{0}: {1}", grp.Key.Id, grp.Key.Date); 
} 
+1

我得到'指定類型的成員「日期」不支持LINQ到Entities'例外,我能解決這個問題?我試圖在查詢中完成這一切? – Vishal 2011-02-28 17:25:43

+0

@Misnomer。啊,linq突然間變成了實體。你爲什麼從一開始就不這麼說? – 2011-02-28 17:27:21

+1

@Misnomer,您可以通過在您的「查詢」中添加「AsEnumerable」來強制記錄進入內存。像'yourList.AsEnumerable()。GroupBy ....' – 2011-02-28 17:29:06

2

看起來你想在日期 ID上分組,所以你想把它們拉入到一個你可以分組的結構中。這是當你創建一個可以使用日期屬性創建正確分組格式的日期該鍵結構:

from item in list 
group item by new { item.Id, Date = item.Date.Date } into g 
select g 

在這一點上,在分組返回鍵會給你你想要的清單。