我有一个UnitGroup的IEnumerable集合:IEnumerable<UnitGroup>
,
class UnitGroup
{
string key { get; set; }
List<UnitType> NameList { get; set; }
}
class UnitType
{
String UnitName{ get; set; }
Description { get; set; }
}
现在我想根据UnitType的UnitName过滤IEnumerable<UnitGroup>
。
例如,我想只获取包含字符串的UnitName记录并删除剩余的记录。
类似的东西:
IEnumerable<UnitGroup> Groups;
IEnumerable<UnitGroup> filteredResult = Groups.NameList(o => o.UnitName.contains("test"));
使用UnitGroup下UnitType下的过滤的UnitNames获取IEnumerable<UnitGroup>
。
实现这一目标的最佳方式是什么?
答案 0 :(得分:2)
我不是100%肯定你想要达到的目标。你能提供一些样本数据,以使其更清晰吗?
虽然,我认为它可能适合您的目标:
IEnumerable<UnitGroup> Groups;
var filteredResult = Groups.Select(g => new UnitGroup {
key = g.key,
NameList = g.NameList
.Where(n => n.UnitName == "test")
.ToList()
})
.Where(g => g.NameList.Count > 0);
答案 1 :(得分:1)
这是应该做@MarcinJuraszek回答的另一种方式。 (我也在猜测问题的意图。)
IEnumerable<UnitGroup> Groups;
var filteredResult = Groups.Where (g => g.NameList.Count() > g.NameList.RemoveAll(nl => nl.UnitName != "Name1"));
如果删除的项目数量少于原始计数,那么我们有感兴趣的项目,因此选择父项。
注意:这将修改原始集合,因此如果您需要多次过滤它,那么这不是您正在寻找的答案。
答案 2 :(得分:0)
试试这个:
var filteredList = from g in Groups
where g.NameList.Exists(i=>i.UnitName=="test")
select g;