使用linq过滤嵌套集合

SJM*_*Man 5 c# linq

我有两个类,一个嵌套在另一个中,

class Person
{
    public string Name;
    public string SSN;
    public List<Car> CarsOwnedByHim;

}
Run Code Online (Sandbox Code Playgroud)

和另一辆车

class Car
{
    public string RegNo; 
    public string Make;
    public string ModelName;
}
Run Code Online (Sandbox Code Playgroud)

List<Person>我想过滤掉所有车型,比如ModelName ="Corolla".

请注意,应返回person实例,但在嵌套列表中,只应筛选出汽车.

以下解决方案正在发挥作用,但我正在寻找更优雅的解决方案.

List<Person> lstPersons = new List<Person>();
foreach (var person in _result)
{
    List<Car> lstCars = new List<Car>();
    foreach (var car in person)
    {
        if (car.ModelName != "Corolla")
            lstCars.Add(car);
    }
    var tempPerson = person;
    tempPerson.CarsOwnedByHim = lstCars;
    lstPersons.Add(tempPerson);

}
return lstPersons ;
Run Code Online (Sandbox Code Playgroud)

这只是原始问题的修改版本.TIA.

Mai*_*mad 5

试试这个.用这样的条款可以得到list制作not equal花冠的人的车Where

lstCars = person.CarsOwnedByHim.Where(x => x.ModelName.ToUpper() != "COROLLA").ToList();
Run Code Online (Sandbox Code Playgroud)

你的整个代码就是这样的

List<Person> lstPersons = new List<Person>();
foreach (var person in _result)
{
    List<Car> lstCars = new List<Car>();
    lstCars=person.CarsOwnedByHim.Where(x => x.ModelName.ToUpper() != "COROLLA").ToList();
    person.CarsOwnedByHim = lstCars;
    lstPersons.Add(person);

}
return lstPersons ;
Run Code Online (Sandbox Code Playgroud)


Vai*_*hav 5

这是为您准备的 lambda 缩写版本:

persons.ForEach(p => p.CarsOwnedByHim.RemoveAll(c => c.ModelName == "Corolla"));
Run Code Online (Sandbox Code Playgroud)