Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择加入LINQ后的所有列_C#_Linq_Select_Join - Fatal编程技术网

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仍然没有解决这个问题的方法。