Сумма часов (ЧЧ: ММ) в Linq - PullRequest
       38

Сумма часов (ЧЧ: ММ) в Linq

2 голосов
/ 08 октября 2019

У меня есть «TimeClocked» в моей таблице базы данных в формате HH.mm, и я хочу суммировать все «TimeClocked» с помощью LINQ.

Я пробовал эту функцию агрегирования.

var data = _projectDbContext
    .Tasks
    .Where(x => x.Project.CompanyId == companyId && x.Status == true)
    .Select(e => TimeSpan.Parse(e.TimeClocked))
    .Aggregate(TimeSpan.FromMinutes(0), (total, next) => total + next)
    .ToString();

Я использую EF Core 3.0.0 . Это показывает ошибку, как это.

Processing of the LINQ expression 'Aggregate<TimeSpan, TimeSpan>(
    source: Select<TaskEntity, TimeSpan>(
        source: Where<TaskEntity>(
            source: DbSet<TaskEntity>, 
            predicate: (x) => x.Project.CompanyId == (Unhandled parameter: __companyId_0) && x.Status == True), 
        selector: (e) => Parse(e.TimeClocked)), 
    seed: (Unhandled parameter: __p_1), 
    func: (total, next) => total + next)' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.

Любая помощь будет благодарна.

1 Ответ

4 голосов
/ 08 октября 2019

Это происходит из-за ограниченной оценки клиента в EF Core 3, поэтому вам нужно позвонить AsEnumerable прямо перед непереводимым выражением

var data = _projectDbContext
    .Tasks
    .Where(x => x.Project.CompanyId == companyId && x.Status == true)
    .AsEnumerable() // switches to LINQ to Objects
    .Select(e => TimeSpan.Parse(e.TimeClocked))
    .Aggregate(TimeSpan.FromMinutes(0), (total, next) => total + next)
    .ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...