0

我需要从 LINQ 的连接中获取 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 循环来提取模型类。我只是想知道是否有更好的方法来进行转移。

ADD: 为了更清楚,我需要从recT传输数据吗?类型到 T?Model 类型。T?Model 类型是为 MVC 数据显示和格式化而修饰的模型类型。我要避免的一件大事是代码中多个位置的相同长的属性分配列表。

4

2 回答 2

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 回答
0

在我看来,您也可以这样做:

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

我不知道构造函数是否包含任何处理逻辑。如果是这样,您可以将该处理推迟到循环中实际读取MyT1MyT2实际读取的那一刻。for

于 2012-12-18T12:45:30.703 回答