Make Entity Framework使用Contains而不是Like并解释'ESCAPE~'

时间:2013-06-05 08:48:57

标签: 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 个答案:

答案 0 :(得分:4)

来自[实体框架博客]:1

  

目前没有针对全文搜索的原生支持。您需要使用原始SQL查询。

似乎要走的路是这样的:

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