[英]Compare Array element with string inside linq query
我有这个模型:
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]
我感谢您的帮助。
问题是表达式解析器不知道如何将数组索引操作转换为等效的 SQL。 您可以使用任何贪婪运算符(例如 ToArray())来获取所有数据,然后在内存中对其进行过滤。
您正在寻找一个基本的 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]
或这会抛出异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.