8

我有一行 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 Server 中,如果我删除“ESCAPE”部分,它的执行速度会快 4 倍左右。

4

1 回答 1

4

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

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

似乎要走的路是这样的:

using (var context = new BloggingContext())
{
    var fishes = context.Fishes.SqlQuery("SELECT * FROM dbo.Fishes WHERE CONTAINS(FishText, @p0)", searchPhrase).ToList();
}
于 2013-06-05T14:12:14.580 回答