2015-03-24 58 views
7

我该如何编写一个LINQ语句来选择在其集合中具有匹配的子对象的父对象?这里是示例类。Linq选择父对象,其中的子对象有一个匹配的子对象

class Parent { 
    int ID { get; set; } 
    string Name { get; set; } 
    List<Child> Children { get; set; } 
} 

class Child { 
    int ID { get; set; } 
    string Name { get; set; } 
    string Nickname { get; set; } 
} 

在上面的示例中,我想返回包含具有特定昵称的子项的所有父项。

+2

投下的问题是相当苛刻的。在输入这个抽象答案之前,我搜索了SO *和* Google。如果这里的工具更好,也许我不会有重复的问题。 – 2015-03-25 01:44:04

+2

Upvoted。这是我的谷歌搜索“linq基于子对象选择父对象”的最佳结果。如果我有代表,我会取消这一点作为重复;链接的问题提供了类似的答案,但问题标题的表述方式并不直观。 – Will 2016-02-04 23:57:05

+1

谢谢你。 – 2016-02-05 16:53:01

回答

18

这是straightfoward LINQ到对象:

listOfParents.Where(p => p.Children.Contains(childObjectToMatch)) 

对LINQ到实体,如果孩子对象不跟踪,你可能会需要匹配的子对象标识符字段的实体:

int childObjectIdToMatch = childObjectToMatch.ID; 
dbContext.Parents.Where(p => p.Children.Any(c => c.ID == childObjectIdToMatch)); 
+1

感谢您花时间提供答案。你一直是最有帮助的。 – 2015-03-25 01:44:41

+0

感谢您在检查儿童房产时提醒我关于Any()。 – gregsonian 2018-02-19 15:47:57

相关问题