[英]How to filter a sub list which is part of another list in C#
我想过滤已经属于另一个列表的列表。
考虑,
类MainClass
properties
String Name
String MainAddress
List<SubClass> ExtraInfo
类子类
properties
String Address
String City
String PhoneNo
现在我列表中有10个项目,列表中的每个项目都有2个ExtraInfo项目,这就是列表项目。
现在我想用条件城市==“纽约”来过滤列表项目。
因此,基于过滤条件,主列表(列表)中的所有10个项目都应具有ExtraInfo(列表)项目。
我的意思是我只想过滤子列表而不是主列表。
提前致谢!
样本数据名称MainAddress ExtraInfo地址城市电话号码
1. Vimal班加罗尔纽约北街654564646 --->子项目1加利福尼亚州北街464654565 --->子项目2
过滤后(条件城市==“纽约”),我应该在主列表中得到输出
Name MainAddress ExtraInfo
Address City Phone No
1. Vimal班加罗尔纽约北街654564646 --->子项目1
希望这可以帮助!
我可能未正确理解问题,但是:
List<MainClass> mainList = ...
mainList.ForEach(m => m.ExtraInfo.RemoveAll(subClass => subClass.City != "New York"));
通过从列表成员ExtraInfo
删除所有项目(就位),列表中的每个项目(类型为SubClass
)都没有“ New York”作为其City
,这将修改mainList
中的每个项目。 那是你要的吗?
如果您只是希望所有与过滤器匹配的“嵌入式” 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();
IMO,如果MainClass提供了一个复制构造函数或克隆方法会更容易,而不需要一一复制所有属性。 这有点脆弱-如果将新属性添加到MainClass
, MainClass
。
您必须过滤每个子列表:
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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.