我有两张桌子,Table1
and 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
, where TABLE3
是一个结果关系(加入后TABLE1
and TABLE2
).
预先感谢您的线索。
如果您想投影为扁平类型,则必须手动指定每个类型。您的另一个选择是让您的组合类型包含两个对象,并且这些对象自然会带来它们的属性。
select new
{
Object1 = object1,
Object2 = output
};
你会像这样使用它myObj.Object1.Property1
, myObj.Object2.Property4
, etc.
仍涉及一些手动工作的最后一个选项是定义适当的类型并使用构造函数或构建器方法来完成将对象属性分割为扁平类型的工作。您仍然执行手动映射,但将其与查询逻辑隔离。
select new CombinedType(object1, output);
//or
select builder.GetCombinedType(object1, output);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)