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

时间:2017-02-13 14:10:46

标签: c# linq linq-to-sql

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

假设我们有3个表:InvoiceOrderOrderItem

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

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 = <???>
}

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

编辑:

订单属性:IdInvoiceIdLocationIdTotal OrderItem属性:IdOrderIdDiscount - 让我们说折扣是一个整数值

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

我为表格的不良描述道歉,请理解它们只是示例,我的实际案例更复杂。

1 个答案:

答案 0 :(得分:3)

您可以使用Any: -

 HasDiscount = g.Any(x => x.HasDiscount)

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