List<Dictionary<string,object>> master
List<Dictionary<string,object>> sub
我的兩個字典具有相同的鍵名的名單2。
EX: The first list Master contains
Master.Add(new Dictionary<string, string>(){
{"key1","SAME1"}
{"key2", "value1"},
{"key3","value2"}
});
Master.Add(new Dictionary<string, string>(){
{"key1","SAME2"}
{"key2", "value3"},
{"key3","value5"}
});
Master.Add(new Dictionary<string, string>(){
{"key1","SAME77"}
{"key2", "value55"},
{"key3","value44"}
});
The second list sub contains similar kind of key,value pairing :
sub.Add(new Dictionary<string, string>(){
{"key1","SAME1"}
{"key2", "value7"},
{"key3","value9"}
});
Master.Add(new Dictionary<string, string>(){
{"key1","SAME2"}
{"key2", "value3"},
{"key3","value4"}
});
有沒有在LINQ的方式(或任何其他更簡單的方法),我可以用它來比較字典的2列表,並得到一個輸出字典。實施例
方案1: 正如你可以看到,我可以使用的鍵(鍵1,因爲它是所有相同的值)從詞典中的第一列表中,以查看是否在該第二字典和如果它存在該值我不想在新的List>中丟失字典。
Output Ex: NewList.Add(new Dictionary<string, string>(){
{"key1","SAME77"} // since SAME77 isn't present in sub dictionary
{"key2", "value55"},
{"key3","value44"}
}
方案2: 如果想在字典中的子列表字典的一個包含相同值的鍵1,我要檢查字典一樣的其他值,如果這些密鑰的任何值有改變,如果他們有我想要一個新的 名單有原來的。
EX輸出:
NewList.Add(new Dictionary<string, string>(){
{"key1","SAME2"}
{"key2", "value3"},
{"key3","value5"} // since the master dictionary has value5 and the sublist dictionary has value 4
}
方案1次嘗試:
var result = Master.SelectMany(m=>m).Where(e=>sub.SelectMany(a=>a)
.Any(p => e.Key == p.Key && p.Value!=null && e.Value!=(p.Value)));
然而,這並不返回正確的結果和輸出是IEnumerable的。有沒有我可以通過linq本身獲得所需的輸出?
感謝任何幫助
你想要做的事情很奇怪。如果你通過key2進行搜索,那麼子列表中的字典都是不同的。你可以嘗試像Master.SelectMany(x => x).Where(x =>!sub.SelectMany(z => z).Select(z => z.Key +「#」+ z.Value).Contains x.Key +「#」+ x.Value)&& x.Key ==「key1」);讓你成爲你的一部分,但你可能想重新考慮你的設計。 – Hakunamatata