如何在LINQ中分组而不是选择所有列

时间:2016-02-25 08:59:32

标签: c# linq group-by

我正在尝试编写一个LINQ查询,这对我来说很复杂,因为我是LINQ的新手。

我有一张如下表......

UserId | CompanyId | ProblemDescription | CreatedTime      | TimeSpentMins
-----------------------------------------------------------------------
1      | 95        | Sysmtem is crashed | 2016-01-01 15:23 | 25
1      | 95        | Total is incorrect | 2016-01-01 15:45 | 45

我想编写一个LINQ查询来完成下面的工作。 CreatedTime有日期和时间,但我想仅按日期对其进行分组。

SELECT UserId, CompanyId,CreateTime Sum(TimeSpentMins)
FROM TransactionLogs
GROUP BY UserId, CompanyId, Convert(DATE,CreatedTime)

我怎么写这个LINQ?我想把我的代码放在下面,但我什么也没得到:(

2 个答案:

答案 0 :(得分:3)

只需使用GroupBy扩展方法并使用EntityFunctions.TruncateTime方法仅获取日期部分: -

var result = db.TransactionLogs
               .GroupBy(x => new 
                            { 
                               CreateTime = EntityFunctions.TruncateTime(x.CreatedTime),
                               UserId,
                               CompanyId 
                            })
               .Select(x => new
                           {
                                UserId = x.Key.UserId,
                                CompanyId = x.Key.CompanyId,
                                CreateTime = x.Key.CreateTime,
                                TotalTimeSpentMins = x.Sum(z => z.TimeSpentMins)
                           });

答案 1 :(得分:1)

试试这个:

var result = db.TransactionLogs
    .GroupBy(_ => new {
        _.UserId, _.CompanyId, DbFunctions.TruncateTime(_.CreatedTime)})
    .Select(_ => new { 
        _.UserId, _.CompanyId, DbFunctions.TruncateTime(_.CreatedTime), 
        Total = _.Sum(t => t.TimeSpentMins)});