如何检查使用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 = <???>
}
我尝试使用let discountedItems = o.OrderItems.Where(i.Discount != 0)
,但我不知道如何引用正确的OrderItems。
编辑:
订单属性:Id
,InvoiceId
,LocationId
,Total
OrderItem属性:Id
,OrderId
,Discount
- 让我们说折扣是一个整数值
建议HasDiscount = g.Any(x => x.OrderItem.Select(oi => oi.Discount != 0).FirstOrDefault())
看起来可能是这样的答案,但我担心性能,因为我在Orders表中有300k项,而OrderItem中有超过一百万项。这不会对每个组进行查询并实现其订单项目吗?
我为表格的不良描述道歉,请理解它们只是示例,我的实际案例更复杂。
答案 0 :(得分:3)
您可以使用Any
: -
HasDiscount = g.Any(x => x.HasDiscount)
假设您的模型中有HasDiscount
布尔属性。