我在尝试连接Oracle中的两个表时遇到以下问题。 其中一个表有一个字符串值,另一个表是长的。
var query = (from d in context.entity
join m in context.entity2
on d.ordernum.Substring(2) equals m.ordernum.ToString())
select new { d.ordernum, d.customer, m.recordkey});
var items = query.ToList();
问题是这不适用于Oracle
不能使用SQLFunctions,因为这是一个Oracle数据库
不能使用.ToString()
LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。
强制使用long.Parse()
LINQ to Entities无法识别方法'Int64 Parse(System.String)'方法,并且此方法无法转换为商店表达式。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以使用AsEnumerable(),因此它将在C#中运行,不会出现这些错误。
var reault = (from d in context.entity.AsEnumerable()
join m in context.entity2.AsEnumerable()
on d.ordernum.Substring(2) equals m.ordernum.ToString()
select new
{
d.ordernum,
d.customer,
m.recordkey
}).ToList();
否则你可以扩展它和write your "own" functions。像:(未经测试)
<Function Name="OracleSubString" ReturnType="Edm.String">
<Parameter Name="order_number" Type="System.Int64" />
<Parameter Name="start_index" Type="System.Int32" />
<DefiningExpression>
SUBSTR(CAST (order_number as varcahr(100)),start_index, LEN(CAST (order_number as varcahr(100)) - start_index)
</DefiningExpression>
</Function>