[英]Contains method for compare string array in C#
我想使用LINQ将sting字段与字符串数组进行比较,我已经编写了下面的扩展方法进行比较,但它无法正常工作。
public static bool Contains(this string source, string[] keys)
{
foreach (var item in keys)
{
if (source.Contains(item))
return true;
}
return false;
}
这是我的疑问:
string[] keys = key.Split('+');
var pages = context.Pages.Where(x => x.Title.Contains(keys));
我得到的错误是:
LINQ to Entities无法识别方法'Boolean Contains(System.String,System.String [])'方法,并且此方法无法转换为商店表达式。
您不能在LINQ中使用自己的自定义方法 - 但是您可以使用普通的LINQ运算符来重写它:
string[] keys = key.Split('+');
var pages = context.Pages.Where(x => keys.Any(key => x.Title.Contains(key)));
如果这不起作用 ,我怀疑它在EF中基本上是不可行的。
您在Where
编写的lambda表达式实际上是由EF评估并转换为SQL的。 例如,当你写
db.Pages.Where(x => x.Title == "Hello")
EF知道将生成的IQueryable<T>
为:
SELECT ... FROM Pages WHERE title = 'Hello'
同样,它知道一些常见的方法和运算符,例如:
db.Pages.Where(x => x.Contains("Hello"))
EF知道将String.Contains
翻译为:
SELECT ... FROM Pages WHERE title LIKE '%Hello%'
但是,当您在表达式中使用自己的自定义方法时,EF不知道如何将该自定义方法转换为SQL,这是它在您看到的错误消息中所抱怨的内容。
LINQ to Entities无法识别方法'Boolean Contains(System.String,System.String [])'方法,并且此方法无法转换为商店表达式。
看到你的代码正在被翻译成SQL,如果我没有错,你的错误就是'Boolean Contains(System.String,这个方法无法翻译,这意味着这个特定部分无法将自身转换为SQL,如果你转换你的字符串作为BIT它可以工作。如果有人觉得我可能在错误的方向,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.