不同的计数x和按日期分组y

时间:2013-11-04 15:01:36

标签: c# linq

我正试图从SQL数据库中的以下数据中获取

date                    |    user   |
(DateTime)              |   (string)|
--------------------------------------------------
2013-06-03 13:24:54.013 |     3     |
2013-06-04 13:25:54.013 |     5     |
2013-06-04 13:26:54.013 |     3     |
2013-06-04 13:27:54.013 |     3     |

表单中的列表

date        | DistinctCountUser
---------------------------------
2013-06-03  | 1
2013-06-04  | 2

我已经尝试了几种方法来实现这一点,但总是最终得到a)不是我预期的结果或b)linq异常。

3 个答案:

答案 0 :(得分:3)

var result = input.GroupBy(x=>x.date.Date,(key,x)=> new {
                      date = key,
                      DistinctCountUser = x.Select(e=>e.user).Distinct().Count()
                   });

答案 1 :(得分:2)

如果您使用的是Entity Framework,那么您应该使用EntityFunctions.TruncateTime获取日期时间字段的日期部分:

 from x in context.TableName
 group x by EntityFunctions.TruncateTime(x.date) into g
 select new {
     date = g.Key,
     DistinctCountUser = g.Select(x => x.user).Distinct().Count()
 }

否则请使用@KingKong回答

答案 2 :(得分:1)

以下是在Linq中进行分组时如何使用查询表达式。在某些情况下,查询表达式可能更容易阅读,我发现分组是其中之一。

from thing in things
group thing by thing.date.Date into g
select new {
    Date = g.Key,
    DistinctCountUser = g.Select(x => x.user).Distinct().Count()
}