2011-08-01 9 views
6

に定義されたアイテムへの参照が含まれていますクエリは労働組合の後、私は同じのDBから2 VARを有する異なるデータコンテキスト

var projectedP1 = P1.Select(x => new Project_test { 
            ID_inString = x.ID.ToString(), 
            col1 = x.col1, 
            col2 = x.col2, 
            col3 = x.col3 }); 
var union = projectedP1.Union(P2); 

単体P1単独P2は、すべてが正常であるとき しかし2は労働組合があるときに、実行時にこれを取得します。

クエリには、別のデータコンテキストで定義された項目への参照が含まれています。

私はこの類似のポストを試みましたが、ダンは理解しています。 ANYONEは何か考えている?

The specified LINQ expression contains references to queries that are associated with different contexts

+0

P1とP2がどのように作成されたのかは明らかです。おそらく、それらは異なるデータのコンテキストから来ていると思われます。私はあなたがこの質問をしたのと同じユーザーであるとも仮定しています:http://stackoverflow.com/questions/6884900/need-to-cast-explicitly-thru-anonymous-type-in​​-union - なぜあなたは別のユーザーアカウント? –

+0

はい、私は登録していないので、同じ人。基本的には、データベースAを使用するP1用のdbml(http://msdn.microsoft.com/en-us/library/bb399400.aspx)を作成します。データベースBを使用するP2用に別のものを作成します。 – gan

+0

ああ、別のデータベース*。 LINQ to SQL側では基本的にそれを行うことはできません.Union SQLクエリの結果と同じではありませんか? –

答えて

9

次の2つの異なるコンテキストからオブジェクトを結合することはできません。ユニオンはデータベースクエリにコンパイルされているため、複数のDBがサポートされていないため、どのように実行するのか分かりません。あなたができることは、それぞれのクエリでToList()を個別に呼び出すことです。これは、データベースクエリを実行し、LINQとオブジェクトの結合を行います。これは完全に反復的なプロセスです。

+6

ToListを呼び出す必要はありません.AsEnumerableだけでは、 'P1.AsEnumerable()。Union(P2)'のようになります。 –

+0

ヒントをお寄せいただきありがとうございます... P2上でやる必要があります。なぜなら、それはそのコンテキストに対して実行されなければならないからです。最初の操作のコンテキスト内では実行されない2番目の結果セットであるため、ここでは推測します.Unionをクエリの一部として変換しようとしません。 –

+1

いいえ、必要はありませんそれはP1でそれをやっているだけで、Enumerableの実装を使い、P1を 'IEnumerable 'として扱うので、P2でやってください。 –