我有一个问题。 有两个表:客户(CustomerID、Name 等)和订单(OrderID、CustomerID 等)。 我想选择至少有一个订单的客户。 我正在使用 LINQ。
context.Customers
.Where(c => c.TypeID == 5)
.Include(x => x.AdditionalParameters)
.Join(context.Orders
.GroupBy(p => p.CustomerID)
.Select(p => new {p.Key, Sum = p.Sum(s => s.TotalPrice)}),
x => (int)x.Id,
x => (int)x.Key,
(customer, order) => new
{
customer.CustomerID,
customer.Name,
order.Sum
})
.AsNoTracking()
.ToListAsync(cancellationToken))
.Select(x => new Result
{
CustomerID = x.CustomerID,
CustomerName = x.Name,
HasOrders = x.Sum > 0
})
.ToList();
我只想检查是否有客户的订单。我知道如何使用子查询在 SQL 中执行此操作(存在时的情况(从订单中选择 1 ....))。但是EF可以吗?
我尝试了所描述的分组和汇总解决方案,但当订单很多时,它可能会很昂贵。 我不想对数据库进行非规范化。如果可能的话,想使用子查询。