linq multi left加入同一财产

时间:2015-06-10 16:16:16

标签: c# linq entity-framework .net-3.5 left-join

是否可以为此查询编写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,但它无法连接到同一个属性两次。

1 个答案:

答案 0 :(得分:0)

最简单的方法是写:

...
from ttdmx in db.testtabledetails.Where(x => 
    tt.id == x.causeid && 
    tt.maxcausedetailorder == x.detailorder).DefaultIfEmpty()
...

这将被翻译成SQL左连接