我有两个表,Table1
和Table2
。我想执行一个左外连接:
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
是结果关系(加入TABLE1
和TABLE2
后)。
提前感谢您的线索。
答案 0 :(得分:10)
如果要投影到展平类型,则必须手动指定每个。您的另一个选择是让您的组合类型包含两个对象,并且对象自然会带来它们的属性。
select new
{
Object1 = object1,
Object2 = output
};
你会像myObj.Object1.Property1
,myObj.Object2.Property4
等一样使用它。
仍然涉及一些手动工作的最后一个选项是定义一个合适的类型,并使用构造函数或构建器方法来完成将对象属性分割为展平类型的工作。您仍然执行手动映射,但将其与查询逻辑隔离开来。
select new CombinedType(object1, output);
//or
select builder.GetCombinedType(object1, output);