Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我一直在努力完成以下任务:

假设我有一个包含名称和值的列表(例如Dictionary)。我需要为Web界面的用户提供一个字段,他可以在其中编写查询,以检查该列表上是否存在特定名称和值。

例如,我有以下列表:

A = 2, B = 4, D = 0


用户想这样查询此列表(不要介意语法,它只是一个伪代码)


A == 2 && D =>这将返回true,因为A存在并且其值为2并且D也存在。
(A && B) || C =>这将返回true,因为AB都存在于列表中。
A && !B =>这将返回false,因为A存在于列表中,但B也存在(但B不应该)


我一直在寻找动态LINQ,但似乎我一次只能评估一个对象(无法检查列表中是否存在对象,然后询问是否不存在)。
有谁知道有用的材料或链接?
谢谢

最佳答案

不确定我是否理解您的要求...

这是您要的吗?

Dictionary<string, int> nameValuePairs = new Dictionary<string, int>();
        nameValuePairs.Add("A", 2);
        nameValuePairs.Add("B", 4);
        nameValuePairs.Add("D", 0);


        //A == 2 && D => this returns true, as A exists and it's value is 2 and D also exists
        int d = 0;
        if (nameValuePairs.ContainsKey("A") && nameValuePairs.TryGetValue("D", out d) && nameValuePairs.ContainsKey("D"))
        {
            Console.WriteLine("Test 1: True");
        }
        else
        {
            Console.WriteLine("Test 1: False");
        }

        //(A && B) OR C => this returns true, as both A and B exists on the list
        if ((nameValuePairs.ContainsKey("A") && nameValuePairs.ContainsKey("B")) || nameValuePairs.ContainsKey("C"))
        {
            Console.WriteLine("Test 2: True");
        }
        else
        {
            Console.WriteLine("Test 2: False");
        }

        //A && !B => this returns false, as A exists on the list but B as well (but B shouldn't)
        if (nameValuePairs.ContainsKey("A") && !nameValuePairs.ContainsKey("B"))
        {
            Console.WriteLine("Test 3: True");
        }
        else
        {
            Console.WriteLine("Test 3: False");
        }

07-26 09:13