如何使用linq从连接中的表中选择所有列
SQL:
select CTRL_RUN_JOB.*, CTRL_DATA_STREAM.*
from CTRL_RUN_JOB inner join CTRL_DATA_STREAM
on CTRL_RUN_JOB.DATA_STREAM_ID= CTRL_DATA_STREAM.DATA_STREAM_ID
Run Code Online (Sandbox Code Playgroud)
LINQ:
from CTLJCRJOB in CTRL_RUN_JOBs
join CTLRFDSTM in CTRL_DATA_STREAMs
on CTLJCRJOB.DATA_STREAM_ID equals CTLRFDSTM.DATA_STREAM_ID
select new {
CTLJCRJOB.* // ???
,CTLRFDSTM.* // ???
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我有两张桌子,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,
//...
};
Run Code Online (Sandbox Code Playgroud)
您可以注意到,我想从结果表中选择两个对象的所有属性(连接时考虑的枚举包含某些类型的对象 - 这两个关系的这些对象都不同).当然,我可以在匿名选择中选择属性,如示例所示.
我的问题是如何避免手动指定所有属性?我想有这样的事情SELECT * FROM TABLE3,在这里TABLE3是造成关系(加入后TABLE1和TABLE2).
提前感谢您的线索.
在这个问题中,我看到了一个匿名类型表达式,其语法不熟悉:
new { MyObjectID = g.Key, totalSum }
Run Code Online (Sandbox Code Playgroud)
起初我认为它, totalSum }是一个语法错误,因为没有指定键,但它编译并在C#3.0中工作.我在LINQPad(2.x - > C#3)中验证了这种语法:
var y = ":-)";
var q = new { Y = y, y, y.Length, };
q.Dump();
Run Code Online (Sandbox Code Playgroud)
结果:
(anon type) {
Y = ":-)",
y = ":-)",
Length = 3
}
Run Code Online (Sandbox Code Playgroud)
规范中的哪个地方定义了这种语法?(答案应包括适用的参考文献和适当的摘录.)
而且,更主观(随意不回答),省略键是一个很好的语法/捷径?到目前为止,我还没有使用它,我不知道它,我不是很迷恋那个语法糖.
有没有办法将LINQ表达式的结果转换为a DataTable而不单步执行每个元素?