使用LINQ省略字典值部分中的一些条目,并将其投影到新的dictonary维护原始密钥中

时间:2009-11-18 16:03:06

标签: vb.net linq lambda

我有一个通用的dictonary,通过以下方式模板化:

Dictionary<object, IList<ISomeInterface>> dictionary1 = new Dictionary<object,    IList<ISomeInterface>>();  

如果我想根据任意键(即组成字典的每个键值对的值部分中包含的列表中的项目)省略某些列表项,给定一些任意条件(假设省略列表)列表项包含字符串“abc”)

的项目

我希望能够创建/投影到一个新词典中,该词典将包含包含列表的条目,而不包含名称中包含“abc”的项目

如何使用Lambda表达式实现此目的?

我正在尝试这样的事情:

var result1 = dictionary1.Where(x =&gt; x.Value == x.Value.Select(y =&gt;!y.contains(“abc”));

2 个答案:

答案 0 :(得分:1)

你想要它作为另一个字典吗?试试这个:

var result = original.ToDictionary(
    pair => pair.Key, // Key in result is key in original
    value => pair.Value  // Value in result is query on original value
                 .Where(item => !item.Contains("abc").ToList());

编辑:VB根据评论:

someDictionary.ToDictionary(Function(x) x.key, _ 
            Function(y) y.Value.Where(not y.Value contains("abc").ToList())

答案 1 :(得分:0)

var result1 = dictionary1.Select(x => 
     {
          return new KeyValuePair<object, IList<ISomeInterface>>(
                     x.Key, 
                     x.Value.Where(y => y.Contains("abc")).ToList());
     }).ToDictionary(item => item.Key, item => item.Value);