您可以尝试使用存储功能。 Ladislav Mrnka在this question解释他们很好。
基本上,您将定义包含在EDMX中,并告诉EF如何映射到SQL Server能够理解的东西(注意:在我的示例中,我将其称为FullTextContains
,因此它不会与C#中的Contains方法混淆 - 不敢肯定,如果这是必要与否):
<Function Name="FullTextContains" ReturnType="Edm.String">
<Parameter Name="field" Type="Edm.String" />
<Parameter Name="value" Type="Edm.String" />
<DefiningExpression>
Contains(field, value)
</DefiningExpression>
</Function>
然后您在C#中的存根方法,所以你可以通过LINQ的称之为:
public static class EdmFunctions
{
[EdmFunction("YourModel", "FullTextContains")]
public static string FullTextContains(string field, string value)
{
throw new NotSupportedException("This function is only for L2E query.");
}
}
然后你就可以使用Linq查询和EF中的该方法应正确翻译它。
由于某种原因它爆炸,我甚至试图删除参数和硬编码常量到定义表达式..但它仍然说生成的SQL是不正确的...想法? –
我期望它爆炸,因为SQL服务器中的'CONTAINS'不是一个函数。这是一个谓词。尝试将其包装在自定义函数中。 –