Я пытаюсь обернуть голову вокруг запроса Linq, чтобы вернуть родительский объект, только если все дочерние объекты содержат определенное свойство.
Т.е., например, возвращать категории, в которых все продукты связаны с этой категориейиметь product.Inventory == 0
Другие заголовки для этого Q:
Выберите ParentObject, где все дочерние объекты имеют конкретное значение ChildObject.Parameter
РЕДАКТИРОВАТЬ:
В дополнение к связи, я также толькохотите получить категорию, если одно из ее свойств даты не равно нулю.
РЕДАКТИРОВАТЬ:
Вот один из примеров, которые я ранее пытался:
var selectQuery =
(from statementDetail in pcardDatabaseContext.PCardStatementDetails
where statementDetail.ExportedDate != null
&& statementDetail.PCardTransactions.All(txn => txn.TransactionStatusID == txnStatusAccountingApproved)
orderby statementDetail.ExportedDate
select statementDetail) as IOrderedQueryable<PCardStatementDetail>;
РЕДАКТИРОВАТЬ:
Нашел решение для моей проблемы, но не могу ответить самостоятельно в течение еще 7 часов.
Я частично испытывал некоторые проблемы с более ранним синтаксисом, я предполагал, что при использовании x.All
значения не будут 'не возвращает никакого совпадения, если набор был пуст.
Вот что решило это для меня:
var selectQuery =
(from statementDetail in pcardDatabaseContext.PCardStatementDetails
where statementDetail.ExportedDate == null
&& statementDetail.PCardTransactions.All(txn => txn.TransactionStatusID == txnStatusAccountingApproved)
&& statementDetail.PCardTransactions.Any()
orderby statementDetail.ExportedDate
select statementDetail) as IOrderedQueryable<PCardStatementDetail>;
Обратите внимание, что я изменил ExportDate
, чтобы получить только ExportedDate == NULL
.Кроме того, мне пришлось добавить .Any
, в противном случае я получал записи, в которых не было транзакций (где я думал, что .All
отфильтрует).