自定义比较字典linq

时间:2013-02-05 12:49:54

标签: linq dictionary

我有两个词典如下:

词典1:

Dictionary<string, string> dict1 = new Dictionary<string, string>();

request.Add("key1", "value1");

request.Add("key2", "value2");    

request.Add("key3", "value3");

词典2:

Dictionary<string, string> request = new Dictionary<string, string>();

request.Add("key1", "value1");

request.Add("key2", "value2");          

我需要使用带条件的LINQ查询来比较以上两个词典:

1) dict2中的所有键都应与dict1中的键匹配

2)匹配的键应具有等效值

3)即使dict2中key2的值为空,也应匹配

上面的帮助表示赞赏。提前谢谢。

此致

萨钦

1 个答案:

答案 0 :(得分:2)

您可以使用Contains method and provide a custom IEqualityComparer,但更简单的方法是使用Any()

var dict1 = new Dictionary<string, string>
{
    {"key1", "value1"},
    {"key2", "value2"},
    {"key3", "value3"}
};

var dict2 = new Dictionary<string, string>
{
    {"key1", "value1"},
    {"key2", "value2"}
};

dict2.All(k2 => 
        dict1.Any(k1 => k1.Key == k2.Key && 
                        (String.IsNullOrEmpty(k2.Value) || k1.Value == k2.Value)))

我猜 empty 你的意思是null或空字符串,因此我使用了String.IsNullOrEmpty。如果您只想检查null,请改为使用简单k2.Value == null