我有一行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倍。
答案 0 :(得分:4)
来自[实体框架博客]:1
目前没有针对全文搜索的原生支持。您需要使用原始SQL查询。
似乎要走的路是这样的:
using (var context = new BloggingContext())
{
var fishes = context.Fishes.SqlQuery("SELECT * FROM dbo.Fishes WHERE CONTAINS(FishText, @p0)", searchPhrase).ToList();
}