Make Entity Framework使用Contains代替Like並解釋'ESCAPE~'

c# entity-framework-6

我有一行LINQ,我在EF中使用它基本上是在做myTable.Where(c => c.Contains('mystring'));

這是生成的代碼:

SELECT TOP (300) 
[Extent1].[ID] AS [ID], 
[Extent1].[FKFishEntityID] AS [FKFishEntityID], 
[Extent1].[Fish] AS [Fish], 
[Extent1].[FishText] AS [FishText], 
[Extent1].[FishType] AS [FishType]
FROM [dbo].[Fish] AS [Extent1]
WHERE [Extent1].[FishText] LIKE @p__linq__0 ESCAPE '~'

我的兩個問題是:

  • 如何使用CONTAINS(...)而不是LIKE?當表使用全文索引時,似乎LIKE非常慢。複製和粘貼查詢需要4秒才能執行,但如果我將LIKE更改為CONTAINS(),它會立即執行。

  • 為什麼要做ESCAPE'〜'?通過複製+粘貼到SQL服務器,如果我刪除'ESCAPE'部分,它的執行速度大約快4倍。

一般承認的答案

來自[實體框架博客]: 1

目前沒有針對全文搜索的原生支持。您需要使用原始SQL查詢。

似乎要走的路是這樣的:

using (var context = new BloggingContext())
{
    var fishes = context.Fishes.SqlQuery("SELECT * FROM dbo.Fishes WHERE CONTAINS(FishText, @p0)", searchPhrase).ToList();
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因