私は、2 つの異なる DB で 2 つのモデルの奇妙な結合方法のように見えるものを構築しようとしています。最初にクエリを実行してから、ID の小さなリストを返して別のデータベースで検索できます。ラムダ関数を使用して Id リストのサブクエリを実行できません。ジェネリックをリンクする Id セレクター関数がありますが、where 句では、誰がソース タイプをリンクするかわからないため、動作します。オブジェクトを Id の渡された関数に渡すため.Where(TSource => idlist.Contains(Idselector)
、サンプル コードは、コードが原因で中断するところまで以下に示しList.Conatins
ます。私が動揺しているので、誰かが助けることができれば大歓迎です
public static Foo JoinTwoModels<T1,T2>(
DbSet Dbs1,
DbSet Dbs2,
Expression<Func<T1, object>> Id1,
Expression<Func<T1, dynamic>> Selector1,
Expression<Func<T1, bool>> Search1,
Expression<Func<T2, object>> Id2,
Expression<Func<T2, dynamic>> Selector2)
{
var Output1 = Queryable.OfType<T1>(Dbs1);
var Output2 = Queryable.OfType<T2>(Dbs2);
List<dynamic> Result1 = Output1.Where(Search1).Select(Selector1).ToList();
List<object> idList = new List<object>();
PropertyInfo p1 = Result1[0].GetType().GetProperty("Id");
foreach (var o1 in Result1)
{
idList.Add(p1.GetValue(o1));
}
//Query result entries into db
List<T2> Result2 = Output2.Where(idlist.contains(Id2)).ToList();