我想过滤列表,它已经是另一个列表的一部分。
考虑一下,
类MainClass
properties
String Name
String MainAddress
List<SubClass> ExtraInfo类SubClass
properties
String Address
String City
String PhoneNo现在我的列表中有10项,列表中的每一项都有2项ExtraInfo项,这是列表项。
现在我想过滤列表项目的条件城市==“纽约”。
因此,主列表(列表)中的所有10个项都应该具有基于筛选条件的ExtraInfo (列表)项。
我的意思是我只想过滤子列表而不是主列表。
提前谢谢!
示例数据名称MainAddress ExtraInfo地址城市电话号码
在过滤器(条件市==“纽约”)之后,我应该在主列表中得到如下所示的输出
Name MainAddress ExtraInfo
Address City Phone No 希望这能有所帮助!
发布于 2010-10-08 08:06:45
您必须过滤每个子列表:
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";
}发布于 2010-10-08 08:03:42
我可能没有正确理解这个问题,但:
List<MainClass> mainList = ...
mainList.ForEach(m => m.ExtraInfo.RemoveAll(subClass => subClass.City != "New York"));这将修改mainList中的每个项目,方法是从其列表成员ExtraInfo(就位)中删除所有项目,其中列表中的每个项目(类型为SubClass)没有“纽约”作为其City。这是你想要的吗?
如果您只是想要所有与筛选器匹配的“嵌入式”ExtraInfo项,而不管它们属于哪个MainClass列表,则可以这样做:
var filteredSubClasses = mainList.SelectMany(m => m.ExtraInfo)
.Where(subClass => subClass.City == "New York");编辑:基于OP的评论:这有点难看,但应该是您所需要的:
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添加一个新属性,它就会崩溃。
https://stackoverflow.com/questions/3888683
复制相似问题