当项目不存在于另一个词典中时过滤字典

时间:2015-04-23 16:22:10

标签: c# linq

我有以下场景 - 作为词典中键的父项列表及其子项,即值。

所以我的字典看起来像这样 - Dictionary<ParentModel,List<ChildModel>>

我有第二个包含这样的字典 - Dictionary - 其中键是一个实际映射到我的ChildModel类中的属性的整数值,并且该值是基于是否设置为true或false或不是我想在我的过滤器中使用密钥。

所以我想要做的就是在我的词典中获取一个ParentModel列表,当他们键入值时,不会有任何子句的id与第二个词典中的键匹配为真。

伪代码 -

Dictionary<ParentModel, List<ChildModel>> parentDictionary;
Dictionary<int, bool> selectedChildIds;

parentDictionary.Where(x => !x.Value.Exists(y => selectedChildIds.Where(z => z.Value).Any(d => d.Key == y.SomeProperty)))

显然代码错了,所以我正在寻找有关如何使用Linq实现目标的帮助。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

所以你想要所有的子键对,其中所有子元素的属性要么不作为另一个字典中的键存在,要么相应的值是false

var result = parentDictionary
    .Where(kv => kv.Value
        .All(c => !selectedChildIds.ContainsKey(c.SomeProperty) 
               || !selectedChildIds[c.SomeProperty]));

答案 1 :(得分:0)

要求:

  • 具有空值的ParentModel列表
  • selectedChilds.ContainsKey(ParentModel.Id)
  • selectedChilds.Value = true

     Dictionary<ParentModel, List<ChildModel>> parentDictionary;
     Dictionary<int, bool> selectedChildIds;
    
     var result = parentDictionary.Where(x => !x.Value.Any() && 
                    selectedChildIds.ContainsKey(x.Key.SomeProperty) && //x.Key.Id?
                    selectedChildIds.Value).Select(x => x.Key).ToList();
    

答案 2 :(得分:0)

websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");