Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ要列出_C#_Linq_Keyvaluepair - Fatal编程技术网

C# LINQ要列出

C# LINQ要列出,c#,linq,keyvaluepair,C#,Linq,Keyvaluepair,我目前正在开发一个.NETFramework 4.7.2应用程序。我正在处理一个LINQ查询,从给定的数据结构中选择对象: List<KeyValuePair<int, Dictionary<string, object>>> 我想选择一个列表,其中dictionary中的value对象的类型为boolean,且值为true 不幸的是,我当前的查询无法正常工作 您知道如何解决这个LINQ查询吗?这有点棘手,因为列表中有KeyValuePair和Diction

我目前正在开发一个.NETFramework 4.7.2应用程序。我正在处理一个LINQ查询,从给定的数据结构中选择对象:

List<KeyValuePair<int, Dictionary<string, object>>>
我想选择一个列表,其中dictionary中的value对象的类型为boolean,且值为true

不幸的是,我当前的查询无法正常工作

您知道如何解决这个LINQ查询吗?这有点棘手,因为列表中有KeyValuePair和Dictionary

多谢各位

这应该有效:

var result = xyz
    .Where(kv => kv.Value.TryGetValue("IsDummy", out object value) 
                 && value is bool b && b); // pattern matching C#7
非C7版本:

...
&& value is bool && (bool)value);
这应该起作用:

var result = xyz
    .Where(kv => kv.Value.TryGetValue("IsDummy", out object value) 
                 && value is bool b && b); // pattern matching C#7
非C7版本:

...
&& value is bool && (bool)value);
您指定了:

我想选择一个列表,其中dictionary中的value对象为boolean类型 它的价值是真的

价值对象?这是否意味着列表中的所有词典只有一个值

或者您只希望列表中的元素有一个只有一个值的字典:布尔值为true? 还是只希望列表中的元素具有至少一个布尔值为true的字典? 或者所有的值都应该是布尔值和真值?

这是可以优化的,使用它您将枚举字典两次。为了提高可读性,我将其保留为这样

第二个规范:仅保留列表中具有至少一个布尔值为真值的字典的元素

var result = source
    .Where(pair => pair.Value.Values
         // keep only the values in the dictionary that are Boolean:
         .OfType<bool>()
         // keep only the true values
         .Where(dictionaryValue => dictionaryValue)
         // keep this list item if there is at least one such value in the dictionary
         .Any());
通过这些示例,可以很容易地编写一个版本,其中字典中的所有项都必须是布尔值,并且具有一个真值

您指定的:

var result = source
    .Where(pair => pair.Value.Values
         // keep only the values in the dictionary that are Boolean:
         .OfType<bool>()
         // keep only the true values
         .Where(dictionaryValue => dictionaryValue)
         // keep this list item if there is at least one such value in the dictionary
         .Any());
我想选择一个列表,其中dictionary中的value对象为boolean类型 它的价值是真的

价值对象?这是否意味着列表中的所有词典只有一个值

或者您只希望列表中的元素有一个只有一个值的字典:布尔值为true? 还是只希望列表中的元素具有至少一个布尔值为true的字典? 或者所有的值都应该是布尔值和真值?

这是可以优化的,使用它您将枚举字典两次。为了提高可读性,我将其保留为这样

第二个规范:仅保留列表中具有至少一个布尔值为真值的字典的元素

var result = source
    .Where(pair => pair.Value.Values
         // keep only the values in the dictionary that are Boolean:
         .OfType<bool>()
         // keep only the true values
         .Where(dictionaryValue => dictionaryValue)
         // keep this list item if there is at least one such value in the dictionary
         .Any());

通过这些示例,可以很容易地编写一个版本,其中字典中的所有项都必须是布尔值且为真值

没有需要解决的LINQ查询。到目前为止你得到了什么?数据就是这样进来的。。。不幸的是,我无法改变这一点……你到底想选择什么?一个KeyValuePair,其中字典有一个键IsDummy和一个对象true?或者相应的int?还是字典?谢谢你的考虑!没有要解决的LINQ查询。到目前为止你得到了什么?数据就是这样进来的。。。不幸的是,我无法改变这一点……你到底想选择什么?一个KeyValuePair,其中字典有一个键IsDummy和一个对象true?或者相应的int?还是字典?谢谢你的考虑!伟大的解决方案,蒂姆,谢谢你!我需要进一步研究C7模式匹配:伟大的解决方案,蒂姆,谢谢你!我需要进一步研究C7模式匹配:
var result = source
    .Where(pair => pair.Value.Values
         // keep only the values in the dictionary that are Boolean:
         .OfType<bool>()
         // keep only the true values
         .Where(dictionaryValue => dictionaryValue)
         // keep this list item if there is at least one such value in the dictionary
         .Any());