我正试图从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异常。
答案 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()
}