使用实体框架和 C# 执行类似的 group by/sum SQL 语句

问题描述 投票:0回答:1

我在SQL Server中有一个抬头发票表(

Header
)和明细表(
Detail
),表中确实有很多列,但主要列是:

  • Header
    :ID、发票编号
  • Detail
    :IdDetail、成本、Id

使用 EF,我通过脚手架方法自动将表映射到类。我想执行类似的 SQL 查询:

select 
    a.id, a.InvoiceNumber, sum(b.cost)
from 
    Header a
inner join 
    Detail b on a.id = b.id
where 
    a.id = 1
group by 
    a.id, a.InvoiceNumber

成本在

Detail
表中,因为详细的每种产品都有自己的成本。我需要将所有产品成本相加。

我尝试做以下事情:

var query = _context.Header
                    .GroupJoin(_context.Details, header => header.Id, det => det.Id,
                        (header, det) => new DocumentDTO
                        {
                            Id = header.Id,
                            InvoiceNumber = header.InvoiceNumber,
                            TotalCost = det.Sum(d => d.Cost)
                        }
                    )
                    .Where(x => x.Id == 1);

var x = query.ToList().FirstOrDefault();

我收到错误:

LINQ 表达式

.GroupJoin( 内部:DbSet(), 外键选择器: header => header.Id, innerKeySelector: det => det.IdD, resultSelector: (header, det) => 新 DocumentDTO{ Id = header.Id, 发票编号 = header.发票编号, 总成本 = det .AsQueryable() .Sum(d => d.Cost) } 无法翻译。以可翻译的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式切换到客户端评估

我想我做不到我想做的事。请问如何使用Entity Framework执行SQL语句?

非常感谢!

c# entity-framework linq
1个回答
0
投票

EF Core 在许多情况下不会翻译

GroupJoin
,因为关系数据库无法表示客户端对象的集合。请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.