Vb.net 使用linq将IDictionary(TK,TV)过滤为IDictionary(TK,TV)

Vb.net 使用linq将IDictionary(TK,TV)过滤为IDictionary(TK,TV),vb.net,linq-to-objects,Vb.net,Linq To Objects,一些非常基本的东西似乎在逃避我 Dim foo As New Dictionary(Of String, String) foo.Add("key", Nothing) foo.Add("key2", "something") 我希望得到一个IDictorany(字符串,字符串),只包含非空值的元素。我以为这样就行了: foo.Where(Function(x) Not String.IsNullOrEmpty(x.Value)) 但这最终是错误的类型。添加: .ToDictionary(F

一些非常基本的东西似乎在逃避我

Dim foo As New Dictionary(Of String, String)
foo.Add("key", Nothing)
foo.Add("key2", "something")
我希望得到一个IDictorany(字符串,字符串),只包含非空值的元素。我以为这样就行了:

foo.Where(Function(x) Not String.IsNullOrEmpty(x.Value))
但这最终是错误的类型。添加:

.ToDictionary(Function(x) x.Key)

也帮不了什么忙。有什么建议吗?

啊。。。回答了我自己的问题。我会保留这个,以防对其他人有用

Dim foo As Dictionary(Of String, String)
foo.Add("k1", Nothing)
foo.Add("k2", "something")

Dim IDictionary(Of String, String) res = foo _
    .Where(Function(x) Not String.IsNullOrEmpty(x.Value)) _
    .ToDictionary(Function(x) x.Key, Function(y) y.Value)

是否在同一范围内创建和筛选词典?如果您是,您可以使用匿名类型进行创建,这使得过滤和将其转换为字典更加干净。