如何编写linq表达式来根据状态过滤导航属性?

时间:2015-01-23 09:02:30

标签: c# linq oop inheritance oftype

父类别包含子类别列表,子类别包含子类别列表。现在我想获取所有父类别,如果其状态为true以及子类别。我想在获取时检查子类别状态。我当前的查询是

 db.Categories.Where(x => x.Status)
.Include(x=>x.SubCategories)
. OfType<ParentCategory>().ToList(); 

如何检查此查询中子类别的状态??

1 个答案:

答案 0 :(得分:0)

尝试使用LINQ的SelectMany()方法。它用于展平嵌套集合。我们可以使用更多的LINQ&#39;而不是使用嵌套的for循环。方式。

以下给出 -

Master m1 = new Master() { name = "A", lstObj = new List<obj> { new obj { i = 1, s = "C++" }, new obj { i = 1, s = "C#" }, new obj { i = 1, s = "Java" } } };

Master m2 = new Master() { name = "A", lstObj = new List<obj> { new obj { i = 4, s = "PHP" }, new obj { i = 5, s = "Ruby" }, new obj { i = 6, s = "Perl" } } };

List<Master> lstMasters = new List<Master> { m1, m2 };
var result = lstMasters.SelectMany(m => m.lstObj).Where(o => o.s == "PHP");

只需用您自己的主类替换Master类。