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