EF Core GroupBy 查询抛出:无法翻译

时间:2021-02-11 12:05:42

标签: entity-framework entity-framework-core

有人能指出我在这个 EF Core 查询中的失礼吗?

var employers = await iqDbContext.Payrolls
    .GroupBy(p => p.PayeScheme.Employer, p => p)
    .Select(group => new EmployerViewModel
    {
        Id = group.Key.Id,
        Name = group.Key.Name
    })
    .ToListAsync();

抛出:

System.InvalidOperationException: The LINQ expression 'DbSet<Payroll>()
    .Join(
        inner: DbSet<PayeScheme>(), 
        outerKeySelector: p => EF.Property<Nullable<int>>(p, "PAYR_fk1_PAYE_SCHEME"), 
        innerKeySelector: p0 => EF.Property<Nullable<int>>(p0, "Id"), 
        resultSelector: (o, i) => new TransparentIdentifier<Payroll, PayeScheme>(
            Outer = o, 
            Inner = i
        ))
    .Join(
        inner: DbSet<Employer>(), 
        outerKeySelector: p => EF.Property<Nullable<int>>(p.Inner, "PychFk1Employer"), 
        innerKeySelector: e => EF.Property<Nullable<int>>(e, "Id"), 
        resultSelector: (o, i) => new TransparentIdentifier<TransparentIdentifier<Payroll, PayeScheme>, Employer>(
            Outer = o, 
            Inner = i
        ))
    .Where(p => p.Inner != null && __accessiblePayrollIds_0.Contains(p.Outer.Outer.Id))
    .GroupBy(
        keySelector: p => p.Inner, 
        elementSelector: p => p.Outer.Outer)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?

1 个答案:

答案 0 :(得分:1)

如果需要正确分组,则必须指定要分组的列,而不是整个对象。

var employers = await iqDbContext.Payrolls
    .GroupBy(p => new { p.PayeScheme.Employer.Id, p.PayeScheme.Employer.Name })
    .Select(group => new EmployerViewModel
    {
        Id = group.Key.Id,
        Name = group.Key.Name,
    })
    .ToListAsync();