C# LINQ要列出
我目前正在开发一个.NETFramework 4.7.2应用程序。我正在处理一个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
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());