C# 用于筛选的LinQ语句

C# 用于筛选的LinQ语句,c#,C#,我正在尝试筛选出一个可观察集合,其中我需要筛选集合中具有子对象的所有项。PropertyX==true MainBusinessObject - PropertyA int - PropertyB string - ListOfSubobject ObservableCollection<Subobject> Subobject - PropertyX bool - PropertyY int - Propert

我正在尝试筛选出一个
可观察集合
,其中我需要筛选集合中具有
子对象的所有项。PropertyX==true

  MainBusinessObject 
     - PropertyA int
     - PropertyB string
     - ListOfSubobject ObservableCollection<Subobject>

  Subobject
     - PropertyX bool
     - PropertyY int
     - PropertyZ - string
编辑
我需要从主业务对象中筛选出
列表子对象
,具体取决于您希望任何子对象具有该属性还是希望所有子对象具有该属性:

var filteredList = listOfMainBusinessObject
                       .Where(x => x.ListOfSubobject.Any(s=>s.PropertyX));

还有一些类型转换似乎无效或不必要。要转换为
MainBusinessObjectCollection
(假设它是
MainBusinessObject
s的集合),您可能需要从
IEnumerable
中初始化它,其中
返回:

var newList = new MainBusinessObjectCollection(filteredList);

根据您是希望任何子对象具有该特性,还是希望所有子对象具有该特性:

var filteredList = listOfMainBusinessObject
                       .Where(x => x.ListOfSubobject.Any(s=>s.PropertyX));

还有一些类型转换似乎无效或不必要。要转换为
MainBusinessObjectCollection
(假设它是
MainBusinessObject
s的集合),您可能需要从
IEnumerable
中初始化它,其中
返回:

var newList = new MainBusinessObjectCollection(filteredList);

如果希望所有
子对象都具有
子对象.PropertyX==true

listOfMainBusinessObject.SelectMany(x => x.ListOfSubobject)
                        .Where(x => x.PropertyX == true);

如果希望所有
子对象都具有
子对象.PropertyX==true

listOfMainBusinessObject.SelectMany(x => x.ListOfSubobject)
                        .Where(x => x.PropertyX == true);

您的意思是如果
ListOfSubobject
中的任何项具有
PropertyX==true
以完全忽略该MainBusinessObject吗?Where()的返回类型为IEnumerable。您不能简单地将其键入MainBusinessObjectCollection。@Ondra这是我目前正在处理的问题。还有其他方法吗?@Nerd您可以使用ToList()方法创建列表,或为MainBusinessObjectCollection创建一个以IEnumerable为参数的构造函数。但顾名思义,您正在使用旧的.NET1方法来收集。我可能会尝试将其更改为泛型。如果您获得了所需的信息,请不要忘记升级投票并将答案标记为已接受。您的意思是,如果
ListOfSubobject
中的任何项具有
PropertyX==true
以完全忽略该MainBusinessObject?Where()的返回类型是IEnumerable。您不能简单地将其键入MainBusinessObjectCollection。@Ondra这是我目前正在处理的问题。还有其他方法吗?@Nerd您可以使用ToList()方法创建列表,或为MainBusinessObjectCollection创建一个以IEnumerable为参数的构造函数。但顾名思义,您正在使用旧的.NET1方法来收集。我可能会尝试将它改为泛型。如果你得到了你想要的信息,别忘了更新投票并将答案标记为已接受