C# 选择加入LINQ后的所有列
我有两个表,C# 选择加入LINQ后的所有列,c#,linq,select,join,C#,Linq,Select,Join,我有两个表,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()
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);
第一个选项在赋值过程中不使用ToString()方法吗?在这种情况下,在执行myOutput.ToArray()之后,我将在名为Object1的列中获得例如“Namespace.MyType”的值……不,它不会调用
ToString()
,这给了您什么想法?您是否将其绑定到某种UI控件?控件可能会调用ToString()
,但查询本身是可信的,tt只是使用整个对象并将其映射到属性。您的评论给了我一个想法-我创建了一个包含两个对象引用的新类。然后很容易绑定到这些属性:)令我难过的是,linq仍然没有解决这个问题的方法。