LINQ查找ID包含搜索词

时间:2018-03-12 14:00:03

标签: c# .net oracle entity-framework linq

我正在尝试检查是否可以通过Linq在Id中找到给定的搜索词。

我尝试使用where(x => x.Id.ToString().Contains(term)),但这不起作用,因为它提供了不支持.ToString的例外

我也尝试使用SqlFunctions.StringConvert((double)x.Id).Contains(term),但这不能正常,因为它提供了异常

'The specified method System.String StringConvert(System.Nullable`1[System.Double]) on the type System.Data.Objects.SqlClient.SqlFunctions cannot be translated to a LINQ to Entities store expression.'

如何在不将所有内容都加载到内存中的情况下使这个查询正常工作(这不是我想要的)

应用程序正在使用EF 5.0并连接到oracle DB

SqlFunctions.StringConvert((double?)x.Id)不起作用。

1 个答案:

答案 0 :(得分:1)

要使其正常工作,您需要调用Oracle数据库的To_Char方法。为此,您需要在Edmx中映射函数,如下所示:

<Function Name="To_Char" ReturnType="varchar2" Aggregate="false" BuiltIn="true" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" StoreFunctionName="To_Char" Schema="{INSERT OWN SCHEMA HERE}">
      <Parameter Name="value" Type="number" Mode="In" />
</Function>

在此之后,您需要创建以下类+方法:

public static class OracleFunctions
{
    [EdmFunction("Model.Store", "To_Char")]
    public static string To_Char(decimal input)
    {
        throw new NotImplementedException();
    }
}

当你这样做时,你可以在像这样的

这样的where语句中调用它
.Where(OracleFunctions.To_Char(x.Code).Contains(term))