0

我有一个 UnitGroup: 的 IEnumerable 集合IEnumerable<UnitGroup>

class UnitGroup
    {      
        string key { get; set; }              
        List<UnitType> NameList { get; set; }
    }
class UnitType
    {               
        String UnitName{ get; set; }
        Description { get; set; }
    }

现在我想IEnumerable<UnitGroup>根据 UnitType 的 UnitName 进行过滤。

例如,我只想获取包含字符串的 UnitName 记录并删除剩余的记录。

像这样的东西:

IEnumerable<UnitGroup> Groups;
IEnumerable<UnitGroup> filteredResult = Groups.NameList(o => o.UnitName.contains("test"));

IEnumerable<UnitGroup>仅使用 UnitGroup 下的 UnitType 下过滤的 UnitNames。

实现这一目标的最佳方法是什么?

4

3 回答 3

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);
于 2013-03-11T20:17:06.553 回答
1

这是另一种应该做@MarcinJuraszek回答的方法。(我也在猜测这个问题的意图。)

IEnumerable<UnitGroup> Groups;
var filteredResult = Groups.Where (g => g.NameList.Count() > g.NameList.RemoveAll(nl => nl.UnitName != "Name1"));

如果删除项目的数量少于原始数量,那么我们有感兴趣的项目,因此选择父项。

注意:这将修改原始集合,因此如果您需要多次过滤它,那么这不是您要寻找的答案。

于 2013-03-11T20:54:50.187 回答
0

试试这个:

  var filteredList = from g in Groups 
                     where g.NameList.Exists(i=>i.UnitName=="test")
                     select g;
于 2013-03-11T20:19:46.607 回答