c#Linq Oracle将long转换为字符串以进行连接

时间:2016-08-09 15:07:04

标签: c# oracle entity-framework linq

我在尝试连接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

  1. 不能使用SQLFunctions,因为这是一个Oracle数据库

  2. 不能使用.ToString()

    LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。

  3. 强制使用long.Parse()

    LINQ to Entities无法识别方法'Int64 Parse(System.String)'方法,并且此方法无法转换为商店表达式。

  4. 任何帮助都将不胜感激。

1 个答案:

答案 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>