1

我正在尝试从 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

我已经尝试了几种使用 linq 的方法,但总是以 a) 不是我预期的结果或 b) linq 异常结束。

4

3 回答 3

3
var result = input.GroupBy(x=>x.date.Date,(key,x)=> new {
                      date = key,
                      DistinctCountUser = x.Select(e=>e.user).Distinct().Count()
                   });
于 2013-11-04T15:04:10.980 回答
2

如果您使用的是实体框架,那么您应该使用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 回答

于 2013-11-04T15:07:17.093 回答
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()
}
于 2013-11-04T15:09:36.730 回答