簡體   English   中英

包含C#中比較字符串數組的方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM