0

LINQ からの結合から 2 つのレコード タイプを取得する必要があります。どちらにも約2ダースの列があり、2つのテーブルのそれぞれから受け取る型にMVCモデル型が定義されているため、結合から単一の融合型を作成しないことをお勧めします。

これまでのところ、次のようなものがあります。

var qry = from recT1 in db.Tbl1
          join recT2 in db.Tbl2 on recT1.colA equals recT2.colA
          where recT1.colA != null
          select new { MyT1 = recT1, MyT2 = recT2 };

それから、私は次のような滑らかなことをしようとしていました:

public class T1and2
{
    public T1Model T1 { get; set; }
    public T2Model T2 { get; set; }
}

T1and2[] aT12 = qry.Select( obj => new T1and2()
    {
        T1 = new T1Model(obj.MyT1),    //-- these ctors defined separately
        T2 = new T2Model(obj.MyT2)
    })
    .ToArray();

しかし、これは私に実行時の状態をNotSupportedException与えます"Only parameterless constructors are supported."

次のステップは、単純に for ループを作成してモデル クラスを抽出することです。何か良い方法で乗り換えができないか調べてみました。

追加: より明確にするために、recT からデータを転送する必要がありますか? 型を T?Model 型に変換します。T?Model 型は、MVC データの表示と書式設定のために装飾されたモデル型です。そして、私が避けようとしている重要なことの 1 つは、コード内の複数の場所でプロパティ割り当ての同じ長いリストを作成することです。

4

2 に答える 2

0

あなたもこれを行うことができるように私には思えます:

var aT12 = qry.Select( obj => new T1and2()
    {
        T1 = obj.MyT1,
        T2 = obj.MyT2
    })
    .ToArray();

コンストラクターに処理ロジックが含まれているかどうかはわかりません。もしそうなら、あなたはその処理をあなたのループでMyT1またMyT2は実際に読まれる瞬間まで延期することができます。for

于 2012-12-18T12:45:30.703 に答える
0

これを試して

var aT12 =
    from obj in qry
    let t1 = new T1Model(obj.MyT1)
    let t2 = new T2Model(obj.MyT2)
    select mew T1and2 { T1 = t1, T2 = t2 };
于 2012-12-18T07:20:35.783 に答える