gpt4 book ai didi

sql-server - 将 SQL Server 的 CONTAINS() 导入为模型定义的函数

转载 作者:行者123 更新时间:2023-12-01 18:55:09 35 4
gpt4 key购买 nike

我正在尝试在 Entity Framework 模型中导入 SQL Server 的 CONTAINS() 函数,以便可以在 LINQ 查询中使用它。

我已将其添加到我的 EDM 中:

<Function Name="FullTextSearch" ReturnType="Edm.Boolean">
<Parameter Name="Filter" Type="Edm.String" />
<DefiningExpression>
CONTAINS(*, Filter)
</DefiningExpression>
</Function>

Add 创建了我的方法 stub :

[EdmFunction("MyModelNamespace", "FullTextSearch")]
public static bool FullTextSearch(string filter)
{
throw new NotSupportedException("This function is only for L2E query.");
}

我尝试像这样调用该函数:

from product in Products
where MyModel.FullTextSearch("FORMSOF(INFLECTIONAL, robe)")
select product

引发以下异常:

The query syntax is not valid. Near term '*'

我意识到我定义的函数没有直接链接到正在查询的实体集,因此这也可能是一个问题。

有什么办法可以解决这个问题吗?

最佳答案

上面定义的函数使用Entity SQL,而不是Transact SQL,所以我认为第一步是弄清楚CONTAINS(*,'text')是否可以用Entity SQL表达。

Entity SQL 不支持 * 运算符,如下所述:http://msdn.microsoft.com/en-us/library/bb738573.aspx如果我尝试

entities.CreateQuery<TABLE_NAME>("select value t from TABLE_NAME as t where CONTAINS(*, 'text')");

我遇到了与上面相同的错误。如果我尝试显式传递该列,它会起作用:

entities.CreateQuery<TABLE_NAME>("select value t from TABLE_NAME as t where CONTAINS(t.COLUMN_NAME, 'text')");

但是当我查看 SQL 时,它会将其转换为 LIKE 表达式。

ADO.NET:Execute Reader "SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[TABLE_NAME] AS [Extent1]
WHERE (CASE WHEN ([Extent1].[COLUMN_NAME] LIKE '%text%') THEN cast(1 as bit) WHEN ( NOT ([Extent1].[COLUMN_NAME] LIKE '%text%')) THEN cast(0 as bit) END) = 1
) AS [GroupBy1]"

如果无法使用 Entity SQL 表达查询,则必须使用存储过程或其他机制来直接使用 Transact SQL。

关于sql-server - 将 SQL Server 的 CONTAINS() 导入为模型定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016082/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com