linq multi left join to same 属性
linq multi left join to same property
是否可以为此查询编写 LINQ? (在 .NET 3.5 中)
select tt.id
,tt.detailscount
,ttdmx.detailorder
,ttdmx.detailtype
,ttdm1.detailorder
,ttdm1.detailtype
,ttdm2.detailorder
,ttdm2.detailtype
from test.testtable tt
left join test.testtabledetails ttdmx on tt.id = ttdmx.causeid
and tt.maxcausedetailorder = ttdmx.detailorder
left join test.testtabledetails ttdm1 on tt.id = ttdm1.causeid
and tt.maxcausedetailorder - 1 = ttdm1.detailorder
left join test.testtabledetails ttdm2 on tt.id = ttdm2.causeid
and tt.maxcausedetailorder - 2 = ttdm2.detailorder
类是这样的:
public class Test {
public int id {get;set;}
public IList<TestDetails> details {get;set}
}
和
public class TestDetails {
public int id {get;set;}
public int detailOrder {get;set;}
public int detailType {get;set;}
}
我尝试使用 queryOver,但它无法连接到同一个 属性 两次。
最简单的方法是写:
...
from ttdmx in db.testtabledetails.Where(x =>
tt.id == x.causeid &&
tt.maxcausedetailorder == x.detailorder).DefaultIfEmpty()
...
这将被翻译成SQL左连接
是否可以为此查询编写 LINQ? (在 .NET 3.5 中)
select tt.id
,tt.detailscount
,ttdmx.detailorder
,ttdmx.detailtype
,ttdm1.detailorder
,ttdm1.detailtype
,ttdm2.detailorder
,ttdm2.detailtype
from test.testtable tt
left join test.testtabledetails ttdmx on tt.id = ttdmx.causeid
and tt.maxcausedetailorder = ttdmx.detailorder
left join test.testtabledetails ttdm1 on tt.id = ttdm1.causeid
and tt.maxcausedetailorder - 1 = ttdm1.detailorder
left join test.testtabledetails ttdm2 on tt.id = ttdm2.causeid
and tt.maxcausedetailorder - 2 = ttdm2.detailorder
类是这样的:
public class Test {
public int id {get;set;}
public IList<TestDetails> details {get;set}
}
和
public class TestDetails {
public int id {get;set;}
public int detailOrder {get;set;}
public int detailType {get;set;}
}
我尝试使用 queryOver,但它无法连接到同一个 属性 两次。
最简单的方法是写:
...
from ttdmx in db.testtabledetails.Where(x =>
tt.id == x.causeid &&
tt.maxcausedetailorder == x.detailorder).DefaultIfEmpty()
...
这将被翻译成SQL左连接