我试图绕过Linq查询,只有在所有子对象都包含特定属性时才返回父对象。
即,例如,返回与该类别相关联的所有产品都有product.Inventory == 0
此Q的其他标题:
选择ParentObject,其中所有ChildObjects都具有特定的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
会过滤掉。)
答案 0 :(得分:2)
var categoriesWithNoInventory =
Categories.Where(c => c.Products.All(p => p.Inventory == 0));
答案 1 :(得分:1)
假设您的课程看起来像这样
public class Category
{
public string Name { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public string Name { get; set; }
public int Inventory { get; set; }
}
然后这将起作用(AllCategories()返回IEnumerable<Category>
)
var categories = AllCategories().Where(c => c.Products.All(p => p.Inventory == 0));
答案 2 :(得分:0)
我认为你必须做2个查询?第一个抓住子产品,然后检查库存,或者我想你可以通过加入来做,这是一个加入示例:http://www.dotnetperls.com/join
答案 3 :(得分:0)
为我的问题找到了一个解决方案,但是再过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
会过滤掉。)