在LINQ中选择JOIN后的所有列

Jam*_*mie 10 c# linq select join

我有两张桌子,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,
                       //...
                   };
Run Code Online (Sandbox Code Playgroud)

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

我的问题是如何避免手动指定所有属性?我想有这样的事情SELECT * FROM TABLE3,在这里TABLE3是造成关系(加入后TABLE1TABLE2).

提前感谢您的线索.

Ant*_*ram 10

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

select new 
{
    Object1 = object1,
    Object2 = output
};
Run Code Online (Sandbox Code Playgroud)

你会用它喜欢的工作myObj.Object1.Property1,myObj.Object2.Property4等等.

仍然涉及一些手动工作的最后一个选项是定义适当的类型,并使用构造函数或构建器方法来完成将对象属性分割为展平类型的工作.您仍然执行手动映射,但将其与查询逻辑隔离.

select new CombinedType(object1, output);
//or 
select builder.GetCombinedType(object1, output);
Run Code Online (Sandbox Code Playgroud)