选择LINQ中JOIN后的所有列
本文关键字:LINQ JOIN 选择 | 更新日期: 2023-09-27 18:11:58
我有两个表,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
之后)。
提前感谢你的提示
如果您想要投影为扁平类型,则必须手动指定每个类型。你的另一个选择是让你的组合类型包含两个对象,对象自然会带来它们的属性。
select new
{
Object1 = object1,
Object2 = output
};
你可以像myObj.Object1.Property1
, myObj.Object2.Property4
等一样使用它
最后一个仍然需要一些手工工作的选择是定义一个适当的类型,并有一个构造函数或构造器方法来完成将对象属性分割成扁平类型的工作。您仍然执行手动映射,但将其与查询逻辑隔离。
select new CombinedType(object1, output);
//or
select builder.GetCombinedType(object1, output);