c# - LINQ在C#中使用多个键值选择查询嵌套字典
问题描述
我面临一个问题,找不到任何合适的解决方案。我有一个嵌套字典,其布局如下:
var dict = new Dictionary<int, Dictionary<string , dynamic>>()
{
0 : {Name : "abc" , marks1 : 05 , Marks2 : 10 , marks3 : 39},
1 : {Name : "efg" , marks1 : 20 , Marks2 : 30 , marks3 : 25},
2 : {Name : "hig" , marks1 : 30 , Marks2 : 40 , marks3 : 33},
3 : {Name : "xyz" , marks1 : 40 , Marks2 : 10 , marks3 : 50}
}
我正在尝试使用 LINQ 进行查询以获取id
那些查询,true
但我无法为查询选择两个或三个条件。对于一个键值,以下查询可以正常工作:
var query = from id in dict
from info in id.Value
where (info.Key == "marks1" && Convert.ToDouble(info.Value) > 10)
select id
但是,当我尝试 2 或 3 个标准来获取例如下面的行 id 时,它不起作用。
var query = from id in dict
from info in id.Value
where (info.Key == "marks1" && Convert.ToDouble(info.Value) > 10)
&& (info.Key == "marks2" && Convert.ToDouble(info.Value) > 20)
select id
此外,如果我必须将这些值相互比较,例如 的值marks1
应该更大mark2
和mark3
。我怎样才能执行这样的查询?特别是当我不允许像这样通过键访问值时:
info["marks1"] > ( info["mark2"] && info["marks3"] )
在 LINQ 中,因为它给了我以下错误:
无法将 [] 索引应用于“keyvaluepair < string , dynamic> 类型的表达式
解决方案
我试过了,它奏效了
var result = dict.Where(x => x.Value.Any(y => y.Key == "marks1" && int.Parse(y.Value) > 10))
.Where(x => x.Value.Any(y => y.Key == "marks2" && int.Parse(y.Value) > 31));
推荐阅读
- mongodb - 如何关闭虚拟机的网卡
- ms-access - word MailMerge(来自 MS Access 数据源)动态表
- kibana - Kibana 7.7.1 - 保存的搜索不包括搜索字符串引号;用 %22 转义不起作用
- python - 在 Qt Designer (PyQt5) 生成的 html 中插入 Python 变量
- scala - 如何将 Protobuf 数据从 Flink 转发到 Kafka 和 stdout?
- crash - swiftui 这个崩溃报告是什么意思?
- wordpress - 类别永久链接中的类别 ID,woocommerce
- r - 数据帧中条目的灵活规范化
- prolog - Prolog递归问题 - 列表中的最小值
- javascript - Webpack - Monorepo 中所有包的一个配置