如何在没有foreach的情况下使用linq过滤嵌套对象?



我有一个带有数据的类"A"对象。我需要根据以下条件进行过滤。

class A
{
public Guid Id { get; set; }
public String name { get; set; }
public Bool Status{ get; set; }
[ForeignKey("AddressId")]
public virtual List<B> AddressDetails { get; set; }
}
class B
{
public Guid AddressId { get; set;}
public String Area{ get; set; }      
public Bool AreaStatus{ get; set;}
}

条件

Class a.Status=True and
Class b.AreaStatus= True

注意:多个类"B"分配给单个类"A"。我需要返回 A 类对象,其中所有 b 类多数据都关联为 areastatus true

如何使用 linq 而不是 foreach 过滤类"A"对象中的数据并获取数据。

这对你有用吗?

list.Where(x =>x.Status).SelectMany(y=>y.AddressDetails.Where(z=>z.AreaStatus)).ToList();

其中列表是"A"的集合,首先基于"A"状态进行过滤,然后基于AreaStatus为true的所有B对象

如果我正确理解了您的问题,我假设您有一个List<A>,并且正在寻找所有AddressDetails条目,其中父类AStatus也为真AreaStatus = true

List<A> _listA = [...] // your data
IEnumerable<B> filteredData = _listA.Where(x => x.Status)
.SelectMany(x => x.AddressDetails)
.Where(x => x.AreaStatus);

但是,如果您尝试查找至少具有一个AreaStatus = true的所有A实例,这将完成:

IEnumerable<A> filteredData2 = _listA.Where(x => x.Status && 
x.AddressDetails.Any(y => y.AreaStatus));

最新更新