我有两个类,一个嵌套在另一个中,
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.
试试这个.用这样的条款可以得到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)
这是为您准备的 lambda 缩写版本:
persons.ForEach(p => p.CarsOwnedByHim.RemoveAll(c => c.ModelName == "Corolla"));
Run Code Online (Sandbox Code Playgroud)