首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用linq筛选嵌套集合

使用linq筛选嵌套集合
EN

Stack Overflow用户
提问于 2015-07-09 05:05:55
回答 6查看 9K关注 0票数 5

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

代码语言:javascript
复制
class Person
{
    public string Name;
    public string SSN;
    public List<Car> CarsOwnedByHim;

}

还有另一辆高级轿车

代码语言:javascript
复制
class Car
{
    public string RegNo; 
    public string Make;
    public string ModelName;
}

List<Person>中,我想过滤掉所有的汽车,比如ModelName = "Corolla“。

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

下面的解决方案是有效的,但我正在寻找一个更优雅的解决方案。

代码语言:javascript
复制
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 ;

这只是原始problem.TIA的一个修改版本。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-09 05:15:53

尝尝这个。您可以通过使用下面的list子句获得一个人的汽车的not equal to corolla

代码语言:javascript
复制
lstCars = person.CarsOwnedByHim.Where(x => x.ModelName.ToUpper() != "COROLLA").ToList();

你的整个代码都是这样的

代码语言:javascript
复制
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 ;
票数 5
EN

Stack Overflow用户

发布于 2015-07-09 09:43:30

这里有一个节略的兰巴版本给你:

代码语言:javascript
复制
persons.ForEach(p => p.CarsOwnedByHim.RemoveAll(c => c.ModelName == "Corolla"));
票数 4
EN

Stack Overflow用户

发布于 2015-07-09 05:14:38

若要删除一份有花冠的人的名单,并保留原始列表:

代码语言:javascript
复制
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();

如果要编辑原始列表:

代码语言:javascript
复制
foreach (var person in _result)
    person.CarsOwnedByHim = 
        person.CarsOwnedByHim
        .Where(t=>t.ModelName != "Corolla")
        .ToList()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31308573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档