2011-02-28 36 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 

在这一点上,在分组返回键会给你你想要的清单。