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

本文关键字:选择 LINQ | 更新日期: 2023-09-27 18:36:05

我正在尝试编写一个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 查询来完成下面的工作。创建时间有日期和时间,但我只想按日期对其进行分组。

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

如何编写此 LINQ?我想把我的代码放在下面,但我什么也没:(

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

只需使用 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)
                           });

试试这个:

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