繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM