转换SQL包含Entity Framework的查询

时间:2018-03-09 11:27:42

标签: c# sql entity-framework

我目前正在针对Entity Framework将一些SQL转换为C#代码,并且遇到了关键字搜索查询的问题。

(非常)简化的查询最终看起来像这样:

SELECT * FROM SomeTable
WHERE CONTAINS(Col1, Col2, Col3, '"word"')

根据文档https://docs.microsoft.com/en-us/sql/t-sql/queries/contains-transact-sql,此方法搜索单词或短语的模糊或精确匹配。因此,如果我搜索关键字“word”,我将得到Col1,Col2或Col3具有“word”实例的结果。

我尝试过针对Entity Framework编写字符串contains方法:

Context.Where(i => i.Col1.Contains("word") || i.Col2.Contains("word") || i.Col3.Contains("word"))

然而,这会产生一个像查询'%word%'的通配符并返回不相关的结果,例如我在“word”和“swords”上获得匹配。

我如何能够获得与SQL包含查询相同的结果?

2 个答案:

答案 0 :(得分:0)

您必须编写自定义SQL函数并从C#中调用它。

例如:

CREATE FUNCTION [dbo].[Search](@Search nvarchar(4000))
RETURNS TABLE
AS
RETURN (
    SELECT 
        *
    FROM 
        [dbo].[SomeTable]
    WHERE 
        CONTAINS(Col1, Col2, Col3, @Search)
)
GO

当它生成EDMX时,请像这样使用它

var query = this.DataContext.Search("my search string");

答案 1 :(得分:0)

尝试使用SqlMethods.Like

示例:

Context.Where(x=> SqlMethods.Like(x.Col1,'word') 
||SqlMethods.Like(x.Col2,'word')).ToList();

您可以在System.Data.Linq.SqlClient;

下找到SqlMethods