2

次のようなクエリがありますが、これは正常に機能します。

ColumnA
    .Join(ColumnB, 
        ColumnA => ColumnA.value, 
        ColumnB => ColumnB.value, 
        (ColumnA, ColumnB) =>  new {ColumnA, ColumnB})
    .Join(ColumnC, 
        join1 => join1.ColumnA.value, 
        ColumnC => ColumnC.value, 
        (join1, ColumnC) =>  new {join1, ColumnC})
    .Join(ColumnD, 
        join2 => join2.ColumnC.Value,
        kobling => ColumnD.Value, 
        (join2, jk1Kobling) => new{  ... })     

ここで、2 番目の結合に追加の列を追加する必要があり、以下に示すものを試しました。まだ、結合に新しい列を実際に追加していませんが、(/* new col */コード内で) 追加する予定でした。問題は、Linq が明らかに型を推測できないことです。結合のためだけに特定のタイプを作成する以外に、この問題を回避する簡単な方法はありますか?

エラー:

The type arguments for method
'System.Linq.Queryable.Join<TOuter,TInner,TKey,TResult>( ...) cannot
be inferred from the usage. Try specifying the type arguments explicitly.

私が実行しようとしているコード:

ColumnA
    .Join(ColumnB, 
        ColumnA => ColumnA.value, 
        ColumnB => ColumnB.value, 
        (ColumnA, ColumnB) =>  new {ColumnA, ColumnB})
    .Join(ColumnC, 
        join1 => new {join1.ColumnA.value,  /* new col */ }, 
        ColumnC => new {ColumnC.value, /* new col*/ }, 
        (join1, ColumnC) =>  new {join1, ColumnC})
    .Join(ColumnD, 
        join2 => join2.ColumnC.Value,
        kobling => ColumnD.Value, 
        (join2, jk1Kobling) => new{  ... })     

以下のコメントのリンクに応じて更新します。問題は、ここの中央の 2 行に関連しています。

.Join(ColumnC, 
     join1 => new { join1.ColumnA.value }, 
     ColumnC => new { ColumnC.value }, 
     (join1, ColumnC) =>  new {join1, ColumnC})

結果に変更を加えることなく、次の2つのことを試しました。

join1 => new { join1.ColumnA.value }, 
         ColumnC => new { value = ColumnC.value }
         join1 => new { value = join1.ColumnA.value }, 
         ColumnC => new { value = ColumnC.value }

何を比較するかを指定する方法がまだわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

3

解決しました!他の誰かが同様の問題に遭遇した場合:

私の場合の問題は、比較しようとしていた列のデータ型が異なっていたことです。1 つは typeShortで、もう 1 つは type でしたint(つまり、これらは、テーブルを表す C# エンティティ クラスで使用される型です)。この場合、Linq は比較時に使用する型を決定できませんでした。

short解決策:値を にキャストするint:

join1 => new { value = (int) join1.ColumnA.value }, 
ColumnC => new { value = ColumnC.value }

新しい列を追加すると、ソリューションは次のようになります。

join1 => new {
               value = (int) join1.ColumnA.value, 
               otherValue =  join1.other
             }, 
ColumnC => new { 
                value = ColumnC.value, 
                otherValue = ColumnC.other
               }
于 2013-10-04T12:18:47.793 に答える