簡體   English   中英

LINQ to Entities無法識別方法'Int32 IndexOf(System.String,System.StringComparison)'方法

[英]LINQ to Entities does not recognize the method 'Int32 IndexOf(System.String, System.StringComparison)' method

我已經使用如下的Entityframework執行了linq查詢

GroupMaster getGroup = null;
getGroup = DataContext.Groups.FirstOrDefault(item => keyword.IndexOf(item.Keywords,StringComparison.OrdinalIgnoreCase)>=0 && item.IsEnabled)

執行此方法時,我得到如下的異常

LINQ to Entities無法識別方法'Int32 IndexOf(System.String,System.StringComparison)'方法,並且此方法無法轉換為商店表達式。

默認情況下包含()方法區分大小寫,所以我需要轉換為lower.Is有任何方法檢查除contains方法之外的字符串匹配,是否有任何方法來解決indexOf方法問題?

你真的只有四種選擇。

  1. 全局更改數據庫的排序規則。 這可以通過多種方式完成,簡單的谷歌搜索應該揭示它們。
  2. 更改單個表或列的排序規則。
  3. 使用存儲過程並在查詢中指定COLATE語句
  4. 執行查詢並返回大量結果,然后使用Linq to Objects在內存中進行過濾。

除非結果集非常小,否則數字4不是一個好的選擇。 如果你不能改變數據庫(但你不能使用Linq),#3是好的。

數字1和2是您需要對整個數據模型做出的選擇,或者您只想在特定字段上進行選擇。

更改服務器排序規則: http//technet.microsoft.com/en-us/library/ms179254.aspx

更改數據庫排序規則: http//technet.microsoft.com/en-us/library/ms179254.aspx

更改列排序規則: http//technet.microsoft.com/en-us/library/ms190920( v = sql.105).aspx

在存儲過程中使用Collat​​e語句: http//technet.microsoft.com/en-us/library/ms184391.aspx

IndexOf方法字符串類將無法被Entity Framework識別,請將此函數替換為SQL 函數Canonical函數

您也可以從這里在這里獲得幫助

您可以使用以下代碼示例:

DataContext.Groups.FirstOrDefault(item => 
    System.Data.Objects.SqlClient.SqlFunctions.CharIndex(item.Keywords, keyword).Value >=0 && item.IsEnabled)

相反,您可以使用以下方法來降低案例:

var lowerCaseItem = item.ToLower();

如果您的項目是string類型。 然后,這可能會讓您通過該異常。

Erik Funkenbush的回答完全有效,就像數據庫問題一樣。 但是我覺得如果你想有效地遍歷它們,你需要一個更好的結構來保存有關關鍵字的數據。

請注意,這個答案並不是更好 ,它旨在解決數據模型中的問題,而不是讓環境適應您擁有的當前(顯然存在缺陷,因為存在問題)數據模型。

我的主要建議,無論時間限制(我意識到這不是最簡單的修復)將為關鍵字添加一個單獨的表(與其相關類具有多對多關系)。

[GROUPS] * ------- * [KEYWORD]

這應該允許你搜索的關鍵詞, 然后才檢索具有與之相關的關鍵字的項目(基於ID,而不是復合字符串)。

int? keywordID = DataContext.Keywords.Where(x => x.Name == keywordFilter).Select(x => x.Id).FirstOrDefault();

if(keywordID != null)
{
    getGroup = DataContext.Groups.FirstOrDefault(group => group.Keywords.Any(kw => kw.Id == keywordID));
}

但是如果在當前項目中不再可能進行這種修復,我完全可以理解。 我想提一下,以防將來有人遇到這個問題並且仍然可以選擇改進數據結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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