c# - LINQ 在 C# 中使用多个键值选择查询嵌套字典

标签 c# linq dictionary key-value

我正面临一个问题,找不到任何合适的解决方案。我有一个嵌套字典,其布局如下:

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 的值应该更大 mark2mark3 .我怎样才能执行这样的查询?特别是当我不允许像这样通过键访问值时:
info["marks1"] > ( info["mark2"] && info["marks3"] )

在 LINQ 中,因为它给了我以下错误:

cannot apply indexing with [] to an expression of type '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));

关于c# - LINQ 在 C# 中使用多个键值选择查询嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60507082/

相关文章:

c# - LINQ - 获取对象列表中某种类型的所有成员

c# - 如何在客户端系统中加载一次Javascript文件并重复使用它们?

c# - 获取我的对象在 linq 集合中位置的好方法

c# - 将字符串与 LINQ 中的项目 ID 相匹配

python - 特定字典的一大列表

python - 如何从字典键/值创建对象属性?

c# - vb6 com 服务器中属性和事件之间的歧义

c# - 在 Windows 应用商店应用程序中,如果我定期从 LocalFolder 中的文件夹读取数据,我可以保留静态引用吗?

c# - 如何将项目添加到 Mock DbSet(使用 Moq)

dictionary - julia - 如何找到字典的最小值/最大值的键?