我在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语句?
非常感谢!