选择LINQ中JOIN后的所有列

本文关键字:LINQ JOIN 选择 | 更新日期: 2023-09-27 18:11:58

我有两个表,Table1Table2。我想执行,比如说,左外连接:

var myOutput = from object1 in Table1
               join object2 in Table2
               on object1.Property1 equals object2.Property2 into Table3
               from output in Table3.DefaultIfEmpty()
               select new
                   {
                       object1.Property1,
                       object1.Property2,
                       //...
                       output.Property3,
                       output.Property4,
                       //...
                   };

您可以注意到,我希望从结果表中选择两个对象的所有属性(连接时考虑的枚举对象包含某些类型的对象—这两个关系的类型不同)。当然,我可以在匿名选择中选择属性,如示例所示。

我的问题是如何避免手动指定所有属性?我想有一些像SELECT * FROM TABLE3,其中TABLE3是一个结果关系(在加入TABLE1TABLE2之后)。

提前感谢你的提示

选择LINQ中JOIN后的所有列

如果您想要投影为扁平类型,则必须手动指定每个类型。你的另一个选择是让你的组合类型包含两个对象,对象自然会带来它们的属性。

select new 
{
    Object1 = object1,
    Object2 = output
};

你可以像myObj.Object1.Property1, myObj.Object2.Property4等一样使用它

最后一个仍然需要一些手工工作的选择是定义一个适当的类型,并有一个构造函数或构造器方法来完成将对象属性分割成扁平类型的工作。您仍然执行手动映射,但将其与查询逻辑隔离。

select new CombinedType(object1, output);
//or 
select builder.GetCombinedType(object1, output);