首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何筛选子列表,它是C#中另一个列表的一部分

如何筛选子列表,它是C#中另一个列表的一部分
EN

Stack Overflow用户
提问于 2010-10-08 07:58:47
回答 2查看 1.5K关注 0票数 0

我想过滤列表,它已经是另一个列表的一部分。

考虑一下,

类MainClass

代码语言:javascript
复制
  properties

      String Name

      String MainAddress

      List<SubClass> ExtraInfo

类SubClass

代码语言:javascript
复制
  properties

      String Address

      String City

      String PhoneNo

现在我的列表中有10项,列表中的每一项都有2项ExtraInfo项,这是列表项。

现在我想过滤列表项目的条件城市==“纽约”。

因此,主列表(列表)中的所有10个项都应该具有基于筛选条件的ExtraInfo (列表)项。

我的意思是我只想过滤子列表而不是主列表。

提前谢谢!

示例数据名称MainAddress ExtraInfo地址城市电话号码

  1. Vimal Bangalore北街纽约654564646 -

  1. Hareesh Chennai北街华盛顿546466466

在过滤器(条件市==“纽约”)之后,我应该在主列表中得到如下所示的输出

代码语言:javascript
复制
 Name      MainAddress       ExtraInfo
                                Address        City        Phone No      

  1. Vimal Bangalore北街654564646 -

  1. Hareesh Chennai B塔(纽约) 464645465 -->项目1

希望这能有所帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-08 08:06:45

您必须过滤每个子列表:

代码语言:javascript
复制
List<MainClass> mainList = ...
foreach(MainClass main in mainList)
{
    ICollectionView view = CollectionViewSource.GetDefaultView(main.ExtraInfo);
    view.Filter = ExtraInfoFilter;
}

bool ExtraInfoFilter(object obj)
{
    ExtraInfo item = (ExtraInfo)obj;

    return item.City == "New York";
}
票数 0
EN

Stack Overflow用户

发布于 2010-10-08 08:03:42

我可能没有正确理解这个问题,但:

代码语言:javascript
复制
List<MainClass> mainList = ...
mainList.ForEach(m => m.ExtraInfo.RemoveAll(subClass => subClass.City != "New York"));

这将修改mainList中的每个项目,方法是从其列表成员ExtraInfo(就位)中删除所有项目,其中列表中的每个项目(类型为SubClass)没有“纽约”作为其City。这是你想要的吗?

如果您只是想要所有与筛选器匹配的“嵌入式”ExtraInfo项,而不管它们属于哪个MainClass列表,则可以这样做:

代码语言:javascript
复制
var filteredSubClasses = mainList.SelectMany(m => m.ExtraInfo)
                                 .Where(subClass => subClass.City == "New York");

编辑:基于OP的评论:这有点难看,但应该是您所需要的:

代码语言:javascript
复制
var filteredList = mainList.Select(m => new MainClass
                            { 
                               Name = m.Name;
                               MainAddress = m.MainAddress;
                               ExtraInfo = m.ExtraInfo
                                            .Where(subClass => subClass.City == "New York")
                                            .ToList()
                            })
                          .ToList();

海事组织,如果MainClass提供一个复制构造函数或克隆方法来消除逐个复制所有属性的需要,那就更容易了。这有点脆弱--如果向MainClass添加一个新属性,它就会崩溃。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3888683

复制
相关文章

相似问题

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