Linq to Entities: добавление условия where к дочерним отношениям

Например, у меня есть список клиентов, у каждого из которых есть список заказов. Теперь я хочу получить список всех клиентов с неоплаченными заказами (допустим, это статус 2). Вместе с этим списком клиентов я хочу также иметь список неоплаченных заказов.

Например, у меня есть это:

from c in mycontext.Customers.Include("Orders")
select c

Куда или как добавить условие для поиска Заказов со статусом == 2 и как включить эти заказы в список клиентов?


person Gerrie Schenck    schedule 09.02.2010    source источник


Ответы (2)


в противном случае

from c in mycontext.Customers.Include("Orders")
where c.Orders.Any(order => order.status == 2)
select c

or

from c in mycontext.Customers.Include("Orders")
let newObject = {
    Customer = c,
    NotPaidOrders = c.Orders.Where(order => order.status == 2).ToList()
}
where newObject.NotPaidOrders.Any()
select newObject
person Community    schedule 09.02.2010
comment
Использование .Any помогло мне найти решение, спасибо! - person Gerrie Schenck; 10.02.2010
comment
Обратите внимание, что если вам также нужны дочерние объекты, которые удовлетворяют условию, Any() нельзя использовать, потому что если Any из Orders имеют order.status == 2, то будут выбраны ВСЕ Orders. Извините, если я возобновил старый пост, но я борюсь с аналогичной проблемой и думал, что это может быть решением, но у меня это не сработало. - person GigiSan; 26.01.2016

Попробуй это:

from c in mycontext.Customers.Include("Orders")
from order in c.Orders
where order.status == 2
select order

Или почему бы просто не сделать это:

from order in mycontext.Orders
where order.status == 2
select order
person Steven    schedule 09.02.2010