我有两个类,一个嵌套在另一个中,
class Person
{
public string Name;
public string SSN;
public List<Car> CarsOwnedByHim;
}
和另一辆车
class Car
{
public string RegNo;
public string Make;
public string ModelName;
}
来自List<Person>
我想过滤掉所有车型,比如ModelName =&#34; Corolla&#34;。
请注意,应返回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 ;
这只是原始问题的修改版本.TIA。
答案 0 :(得分:5)
试试这个。您可以使用list
这样的not equal
子句获取Where
个人的lstCars = person.CarsOwnedByHim.Where(x => x.ModelName.ToUpper() != "COROLLA").ToList();
个汽车
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 ;
你的整个代码就像这样
x = (int *) malloc(n);
答案 1 :(得分:2)
这是一个精简版的lambda版本:
persons.ForEach(p => p.CarsOwnedByHim.RemoveAll(c => c.ModelName == "Corolla"));
答案 2 :(得分:1)
要获取已移除Corollas的人员列表,并单独保留原始列表:
var lstPersons = (
from p in _result
select new Person() {
Name = p.Name,
SSN = p.SSN,
CarsOwnedByHim = p.CarsOwnedByHim.Where(t=>t.ModelName != "Corolla").ToList()
}).ToList();
如果您想编辑原始列表:
foreach (var person in _result)
person.CarsOwnedByHim =
person.CarsOwnedByHim
.Where(t=>t.ModelName != "Corolla")
.ToList()
答案 3 :(得分:0)
使用linq很棒:
$scope.$on('myComponent.error', function (event, data) {
console.log(data);
// show message, redirect or something else
确保包含linq
的using语句你可以拥有无限制的where子句,只需在第一个
下添加它List<Car> carStatus =
(from car in person
where car.ModelName != "Corolla"
select car).ToList();
确保在最后执行.ToList或.Single或.SingleOrDefault查询数据,直到用.ToList或类似的东西调用它们才会查询它。
如果要选择子模型或属性,可以在选择中执行:
List<Car> carStatus =
(from car in person
where car.ModelName != "Corolla"
where car.Color == "blue"
select car).ToList();
答案 4 :(得分:0)
您可以像这样使用交叉连接
var combo = from p in Person
from c in cars.Where(t=>t.ModelName != "Corolla")
select new
{
Name=p.Name,
SSN=p.SSN,
CarsOwnedByHim=c.ToList()
};
答案 5 :(得分:0)
尝试一下:
var cars = (from p in persons
from c in p.CarsOwnedByHim
where c.ModelName == "Corolla"
select c).ToList();