我目前正在针对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包含查询相同的结果?
答案 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