我有这个型号:
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]
感谢您的帮助。
答案 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]
的值,否则会抛出异常。