【问题标题】:Filter Both Parent And Child Collection过滤父子集合
【发布时间】:2020-11-23 19:54:53
【问题描述】:

我有一个List<Employee>

带有List<Address> 集合的Employee

Address 类有一个 City 属性

所以List<Employee 可以这样填充:

NAME | ADDRESS[0]        | ADDRESS[1]
Bob  | Main St, Boston   | River St, Chicago
Mary | Park St, Seattle  | Beach St, Miami

以下 linq 返回所有具有地址对象的 Employee 对象,其中 City 为“波士顿”。

employeeList.Where(x => x.Addresses.Any(y => y.City == "Boston")).ToList<Employee>(); 

虽然这会正确过滤具有波士顿地址的员工,但也会返回他们的其他非波士顿地址。使用上表来说明,唯一返回的员工是 Bob(这是正确的),但他的两个地址也都返回了。我只想返回他的波士顿地址。

这是否可以使用 linq 或者我是否需要做一些额外的手动过滤来过滤子集合?

【问题讨论】:

    标签: c# .net linq


    【解决方案1】:

    你就不能像下面这样:

    employeeList.Where(x => x.Addresses.Any(y => y.City == "Boston"))
            .Select(z => new Employee()
    {
       Name = z.Name,
       Addresses = z.Addresses.Where(a => a.City == "Boston").ToList<Address>()    
    }).ToList<Employee>();
    

    【讨论】:

      【解决方案2】:

      请试试这个

      employeeList.Where(x => x.Addresses
                          .Contains(x.Addresses.Where(y => y.City == "Boston")
                              .FirstOrDefault())).ToList<Employee>(); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        相关资源
        最近更新 更多