Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何从LINQ中获取多个记录类型?_.net_Linq - Fatal编程技术网

.net 如何从LINQ中获取多个记录类型?

.net 如何从LINQ中获取多个记录类型?,.net,linq,.net,Linq,我需要从LINQ的一个连接中获得2种记录类型。我不希望在联接之外创建一个合并类型,因为它们都有大约24个列,并且我已经定义了MVC模型类型,以从两个表中的每个表接收类型 到目前为止,我有这样的想法: var qry = from recT1 in db.Tbl1 join recT2 in db.Tbl2 on recT1.colA equals recT2.colA where recT1.colA != null select ne

我需要从LINQ的一个连接中获得2种记录类型。我不希望在联接之外创建一个合并类型,因为它们都有大约24个列,并且我已经定义了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
声明
“只支持无参数构造函数。”

我的下一步将只是创建一个for循环来提取模型类。我只是想知道是否有更好的方式进行转移

添加: 为了增加清晰度,我需要从recT传输数据?类型转换为T?模型类型。T?模型类型是为MVC数据显示和格式化而修饰的模型类型。我试图避免的一件大事是代码中多个位置的相同长的属性赋值列表。

试试这个

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 };

在我看来,你也可以做到这一点:

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

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

谢谢,尤里。但我认为这与当前使用的匿名对象没有任何区别。匿名对象可以很好地嵌套来自查询的多个对象。它从实体类型转换到我的模型类型,而问题似乎正在发生。如果我误读了你的建议,请告诉我。我刚才看到了T1and2,想到了Tuple。我应该更清楚使用的类型。我不希望“实体”类型来自表定义。我希望将数据传输到设计为作为模型对象公开的类型中。模型类型已使用用于格式化和标签的显示属性进行装饰。我试图将数据从两个实体类型传输到两个模型类型,但没有显式地分配所有属性。我创建了用于传输的构造函数,这样我就可以重用该逻辑,而不必在一堆不同的地方传输相同长的字段列表。好吧,您可以将构造函数逻辑传输到属性的setter,并只设置属性。两次是helluva反模式,但可能是可以原谅的,因为无参数构造函数的要求迫使你这么做。是的。但如果我被迫朝那个方向走,使用for循环就更容易了。我真的只是想弄清楚,是否有一种巧妙的方式(一条线)来进行转换,我不知道。这看起来像是一个硬性限制。我应该更清楚使用的类型。我不希望“实体”类型来自表定义。我希望将数据传输到设计为作为模型对象公开的类型中。模型类型已使用用于格式化和标签的显示属性进行装饰。我试图将数据从两个实体类型传输到两个模型类型,但没有显式地分配所有属性。我创建了执行传输的ctor,这样我就可以重用该逻辑,而不必在一堆不同的地方传输相同的长列表字段。