2016-08-09 5 views
0

Oracleで2つのテーブルを結合しようとする際に、次の問題があります。 テーブルの1つに文字列値があり、もう1つはlongです。問題は、これはOracleデータベースc#Linq Oracleを結合のために長い文字列に変換する

  • カントは.ToString()へ

    LINQを使用しているとして、これは、Oracle

    1. カント利用SQLFunctionsでは動作しないということである

      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(); 
      

      エンティティはメソッド 'System.String ToString()'を認識せず、このメソッドをストア式に変換することはできません。

    2. キャスト使用long.Parse()エンティティに

      LINQは、メソッド「Int64型解析(可能System.String)」メソッドを認識しない、この方法は、ストア式に変換することができません。

    助けてください。

  • +0

    ToStringはLINQ to Entitiesでサポートされています。 EFのどのバージョンを使用していますか? –

    +0

    EFは6.1.3で、ToString()を使用するときに上に示したように、Linqがメソッドを認識しないというエラーが発生します。 – Denisjc

    答えて

    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> 
    
    +1

    私は自分の常識では、すべてのアイテムをメモリに取り込むのではなく、データベースでクエリを取得しようとしていると思います。実行可能ではないと私は思う。 – anotherNeo

    +0

    @anotherNeo - 私もデータベースで好きですが、現在 'SqlFunctions'が方法であることを知っています(しかし、彼が言うところではOracleではサポートされていません..) –

    +0

    @Denisjc - ' AsEnumerableまたは「あなた自身の機能を書いてください」という意味ですか? –

    関連する問題