2013-07-17 117 views
1

我無法在此找到最近正確的答案。Linq正則表達式全文搜索

Linq不支持正則表達式,試圖提取出一種方法並不能取代框架。我如何在linq中的句子列表上進行整個工作匹配。

我需要\ b的原因是因爲它可能是字符串的開始或結尾,或者有逗號,短劃線或其他類似的分隔符。

private bool isMatch(string searchText, string text) 
    { 
     return Regex.IsMatch(searchText, "\\b"+text+"\\b", RegexOptions.IgnoreCase | RegexOptions.Compiled); 
    } 


     result p = itemsRep 
      .Where(fullText=> isMatch(searchText, fullText)) 
      .FirstOrDefault(); 
+0

什麼是你想怎麼辦?找到第一場比賽?如果是這樣你不需要LINQ。找到匹配的第一個單詞?你在lamda中根本不使用「s」。 –

+0

Linq支持任何你可以用.NET編寫的東西。 Linq-to-Entities,Linq-to-SQL等可能不會。你在用什麼Linq提供商? –

+0

你能舉一個輸入和期望輸出的例子嗎? –

回答

2

我想你的意思是,LINQ到SQL/LINQ到實體不支持Regex表達式。

嘗試在您的.Where()之前加入.AsEnumerable()

.Where()方法將枚舉任何已翻譯的查詢的結果,而不是嘗試將您的.Where()表達式轉換爲SQL。

像這樣:

result p = itemsRep 
      .AsEnumerable() 
      .Where(fullText => isMatch(searchText, fullText)) 
      .FirstOrDefault(); 
+1

他們可以支持正則表達式,但只能如果您創建SQLCLR標量函數並在您的LINQ查詢中使用該函數。你是正確的,否則你不能使用正則表達式。 –