如何使用LINQ通过匹配键和值来选择KeyValuePairs的列表

时间:2014-04-07 08:23:12

标签: c# .net

我有一个KeyValuePair列表的通用列表,

即。 List<List<KeyValuePair<string, string>>>

我正在尝试提取内部列表List<KeyValuePair<string, string>>

基于Key和Values的值。

这是我的代码:

            var layer =
            (from item in layers
            from kvp in item
            where kvp.Key == "category" && kvp.Value == category_name
            where kvp.Key == "featureType" && kvp.Value == feature_type
            where kvp.Key == "assetType" && kvp.Value == asset_type
            select item);`

在上面的代码项目中将有一个KeyValuePairs列表,我想匹配那些以找到合适的项目。

我想在我的where子句中说的是KeyValuePair(KVP)有一个键==“category”和KVP == category_name的值以及另一个KVP有一个键==“featureType”的地方并且该KVP的值是feature_type,而另一个KVP的key =“assetType”以及该KVP的值== asset_type。

这不起作用,因为图层是一个空列表,但我知道有三个KVP匹配的项目就在那里。

任何人都可以帮我指出正确的方向吗?

1 个答案:

答案 0 :(得分:2)

我想这就是你想要的,所有包含这些键值对的列表:

IEnumerable<List<KeyValuePair<string, string>>> layer = layers
    .Where(l => l.Any(kv => kv.Key == "category" && kv.Value == category_name)
            &&  l.Any(kv => kv.Key == "featureType" && kv.Value == feature_type)
            &&  l.Any(kv => kv.Key == "assetType" && kv.Value == asset_type));

如果您只希望使用一次SingleOrDefault或(如果不例外)FirstOrDefault