检查组中任何项目的条件是否为真

Tad*_*rić 1 c# linq linq-to-sql

如何检查使用 Linq to sql 创建的组中的任何项目的条件是否为真?

假设我们有 3 个表:Invoice,Order和OrderItem。

我想知道发票上所有订单的总数,以及发票上订单中的任何订单项目是否有折扣。

from o in db.Orders
group o by new 
{
    InvoiceId = o.InvoiceId,
    LocationId = o.LocationId,
} into g
select new 
{
    InvoiceId = g.Key.InvoiceId,
    LocationId = g.Key.LocationId,
    Total = g.Sum(x => x.Total).
    HasDiscount = <???>
}
Run Code Online (Sandbox Code Playgroud)

我尝试过,let discountedItems = o.OrderItems.Where(i.Discount != 0)但我不知道如何引用正确的 OrderItems。

编辑:

Order Properties: Id, InvoiceId, LocationId, Total OrderItem Properties: Id, OrderId, Discount- 假设折扣是一个整数值

建议的答案HasDiscount = g.Any(x => x.OrderItem.Select(oi => oi.Discount != 0).FirstOrDefault())可能是这样,但我担心性能,因为我在 Orders 表中有 30 万个项目,在 OrderItem 中有超过 100 万个项目。这不会对每个组进行查询并实现他们的订单项目吗?

对于表格的描述不佳,我深表歉意,请理解它们只是示例,我的真实案例更复杂。

Rah*_*ngh 6

您可以使用Any:-

 HasDiscount = g.Any(x => x.HasDiscount)
Run Code Online (Sandbox Code Playgroud)

假设您HasDiscount的模型中有布尔属性。