2010-05-01 55 views
0

我需要通過子集合的屬性值過濾出父項。 我做這樣的事情:LINQ到SQL的組合。任何表達式

var results = (from c in db.Customers where 
    c.Orders.Any(o => o.Status = (int)Status.Ordered) 
    select c; 

這很好,但現在我需要2個值過濾,即採取有有兩個值任何孩子記錄的所有父記錄:

var results = (from c in db.Customers where 
    c.Orders.Any(o => o.Status == (int)Status.Ordered) && (o.Status == (int).Shipped)) 
    select c; 

嘗試像這樣的明顯不起作用。

回答

2

當然,這是行不通的。您可以通過滿足不可能條件的訂單進行過濾。你的意思是:「讓我所有訂單的狀態等於訂單等於同時發貨」。難怪沒有這樣的命令。 :-)

如果你想獲得有兩種訂購和發貨的訂單所有的客戶,你沒有選擇,只能使用兩次Any

var results = (from c in db.Customers where 
    c.Orders.Any(o => o.Status == (int)Status.Ordered)) 
    && 
    c.Orders.Any(o => o.Status == (int)Status.Shipped)) 
    select c; 
+0

感謝您的答覆。是的,「AND」在這裏是不正確的,但是這會給我帶有「已訂購」或「已發貨」訂單的客戶,而我需要同時具有「已訂購」和「已發貨」訂單的客戶。 – Victor 2010-05-01 04:46:52

+0

在這種情況下,你別無選擇,只能使用'Any'兩次。我已經糾正了答案。 – 2010-05-01 06:18:16

+0

謝謝,那就是我正在尋找的 – Victor 2010-05-01 15:54:25