2016-02-25 3 views
1

Я пытаюсь написать запрос LINQ, который является сложным для меня сейчас, так как я новичок в 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? Я хотел поставить мой код ниже, но я ничего не получил :(

ответ

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) 
          }); 
+0

Он дает мне следующую ошибку: указанный тип member 'Date' не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности. –

+0

@ayilmaz - Проверьте мое обновление. –

1

попробовать это один:

var result = db.TransactionLogs 
    .GroupBy(_ => new { 
     _.UserId, _.CompanyId, DbFunctions.TruncateTime(_.CreatedTime)}) 
    .Select(_ => new { 
     _.UserId, _.CompanyId, DbFunctions.TruncateTime(_.CreatedTime), 
     Total = _.Sum(t => t.TimeSpentMins)}); 
Смежные вопросы