2017-02-13 44 views
0

如何檢查對於使用Linq to sql創建的組中的任何項目是否爲conditaion?檢查一個組中的任何項目的條件是否爲

假設我們有3個表:Invoice,OrderOrderItem

我想知道發票上所有訂單的總數,以及發票上訂單的訂單項是否有折扣。

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中有超過100萬個項目。不會這對每個組進行查詢並實現其訂單項目?

對於表格的不好的描述,我表示歉意,請理解它們只是一些例子,我的真實案例會更復雜。

+6

我想你正在尋找'Any':'HasDiscount = g.Any(x => x.Discount!= 0))' –

+0

下一次,請發佈更多關於你的實體的細節 –

+0

我編輯了更多細節的問題 –

回答

3

您可以使用Any: -

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

假設你已經在你的模型HasDiscount布爾屬性。

+0

訂單沒有HasDiscount - OrderItem有一個整數折扣字段,所以'HasDiscount = g.Any(x => x.OrderItem.Select(oi => oi.Discount!= 0).FirstOrDefault())'會做訣竅。你能評論這種方法的表現嗎? –

+0

如果你有大量數據,爲什麼你在做這些內存?完成數據庫本身的所有過濾並返回相關數據。您還可以運行一些測試來檢查性能差異。 –

相關問題