【发布时间】:2020-06-15 19:48:46
【问题描述】:
我遇到了一个问题,找不到任何合适的解决方案。我有一个嵌套字典,其布局如下:
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 中,因为它给了我以下错误:
无法将 [] 索引应用于“键值对”类型的表达式
【问题讨论】:
-
关于您问题的第一部分(使用 2 或 3 个标准):这是一个合乎逻辑的问题吗?您正在请求
info.Key == "marks1" && info.Key == "marks2",但您可能想要info.Key == "marks1" || info.Key == "marks2"(注意逻辑或) -
是的,你是对的,我只是在这里作为一个例子
标签: c# linq dictionary key-value