我正在尝试检查是否可以通过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)不起作用。
答案 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))