将数组元素与linq查询中的字符串进行比较

时间:2015-10-19 15:28:57

标签: c# linq

我有这个型号:

 public class Model_Test
    {
        public string Prop1 { get; set; }            
        public string Prop2 { get; set; }
        public string[] Prop3 { get; set; }
    }

检查Prop3是否为数组。

Prop3内的值与{"answer1","answer2","answer3"}

类似

我需要执行一个查询,该查询仅包含Model_Test所在的answer3对象"是",我是这样的:

result = from q in Model_Test
         where q.Prop3[2] == "Yes"                    
         select new { Name = Prop1, Value = Prop2 };

当我执行此查询时,我收到此错误:

无法识别的表达式节点:ArrayIndex

我认为问题出在我的查询的这一部分:q.Prop3[2]

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

问题是表达式解析器不知道如何将数组索引操作转换为等效的SQL。 您可以使用任何贪婪的运算符(例如ToArray())来获取所有数据,然后在内存中对其进行过滤。

答案 1 :(得分:0)

您正在寻找基本的linq where查询:

// Your Model
public class Model_Test
    {
        public string Prop1 { get; set; }            
        public string Prop2 { get; set; }
        public bool[] Prop3 { get; set; }
    }

//Usage
List<Model_Test> lst = new List<Model_Test>(){
        new Model_Test{Prop1="Foo", Prop2="Bar",Prop3 = new bool[]{true,false,true}},
        new Model_Test{Prop1="Foo2", Prop2="Bar2",Prop3 = new bool[]{true,false,false}},
        new Model_Test{Prop1="Foo3", Prop2="Bar3",Prop3 = new bool[]{true,false,true}},
    };

    // Query Expression
    var result = from element in lst
                where element.Prop3[2] == true
                select new {Name = element.Prop1, Value = element.Prop2};

    // Lambda Expression    
    var result2 = lst.Where(x=>x.Prop3[2]==true).Select(x=> new {Name=x.Prop1, Value = x.Prop2});

但是你需要确保设为Prop3[2]的值,否则会抛出异常。