2017-08-03 9 views
0

おはよう、特定のプロパティのEF6 IN句

私はEFクエリに問題があります。これは私がやろうとしていることです。

まず私はIDのそうのような(IDのリストが含まx.MappingAcctsエンティティに発見された)のリストを引っ張っています:

Entities.DB1.Mapping mapping = null; 
using (var db = new Entities.DB1.DB1Conn()) 
{ 
    mapping = db.Mappings.Where(x => x.Code == code).Include(x => x.MappingAccts).FirstOrDefault(); 
} 

後、私は別のDBにクエリを実行しようとしています上記のIDのリスト(本質的にIN句)に対して:

using (var db = new Entities.DB2.DB2Conn()) 
{ 
    var accounts = db.Accounts.Where(mapping.MappingAccts.Any(y => y.Id == ?????????)).ToList(); 
} 

わかりましたように、私はこれで部分的にしか得られませんでした。

基本的には、ID列に対してAccountsテーブルをクエリし、mapping.MappingAccts.Id列に一致するすべてのレコードを取得する必要があります。

例のほとんどは、1次元配列に対してこれを行う方法をうまく説明していますが、特定の列を比較することを検討しています。

いずれかのアシストはすばらしいでしょう。

Nugs

答えて

0

これは最初のDB1コンテキストからIEnumberable.Contains

を使用して生成されたアンIN句MappingAccts

using (var db = new Entities.DB2.DB2Conn()) 
{ 
    var accounts = db.Accounts.Where(s => mapping.MappingAccts.Any(y => y.Id == s.Id)).ToList(); 
} 
+0

このメソッドを使用すると、次のエラーが発生します。 'Entities.DB1.MappingAcct'型の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。 – Nugs

1

に含まれるIDを持つアカウントのリストが表示されます、 Idのリストを具体化する

var idList = mapping.MappingAccts.Select(m => m.Id).ToList(); 

次にIDの

var accounts = db.Accounts.Where(a => idList.Contains(a.Id)).ToList(); 

のマテリアライズド・リストに対して二コンテキストクエリはあなたが持つかもしれ唯一の問題は、あなたが最初のリストになっているIDの量です。あなたは、SQLクエリで限界を打つかもしれません。

+0

はい。そのため、私は最初のdbcontextにリンクされていないIDのリストを実現しています。それから、それが含まれています。 – Fran

+0

申し訳ありませんが、あなたがそれを処理したというコメントをした直後に気づきました。私はあなたが答える前にコメントを削除しようとしましたが、あなたは速すぎました。 –

+0

@BradleyUffner問題ありません。私はより明確に答えを編集しました。 – Fran