2014-10-07 32 views
1

检索所有记录我曾经做过一个内部联接,它仅显示与以下查询匹配的记录: -的LINQ - INNER JOIN不是从左表

var data = from t1 in ctx.tblEmp 
      join t2 in ctx.tblHelp 
       on t1.Field equals t2.Fld 
      where t1.Id == Id && 
       t2.Id == Id 
      select new Settings { Master = t1.Labelname, OrderNo = t2.OrderNo}; 

我想从tblEmp &唯一匹配的记录中的所有记录从tblHelp

如何做到这一点?

+4

这是一个左连接,然后不是一个内部联接。你可以在SO上搜索这个。 – 2014-10-07 11:05:14

+0

http://stackoverflow.com/questions/5537995/entity-framework-left-join – AlexFoxGill 2014-10-07 11:32:08

回答

2

用作

var data = from t1 in ctx.tblEmp 
     join t2 in ctx.tblHelp 
      on t1.Field equals t2.Fld into u 
      from t2 in u.DefaultIfEmpty() 
     where t1.Id == Id && 
      t2.Id == Id 

     select new Settings { Master = t1.Labelname, OrderNo = t2.OrderNo}; 

试试这个

var data = from t1 in ctx.tblEmp 
     join t2 in ctx.tblHelp 
      on t1.Field equals t2.Fld into u 
      from t2 in u.DefaultIfEmpty() 
     where t1.Id == Id 
     orderby columnname // Added Order By 
     select new Settings { Master = t1.Labelname, OrderNo = t2.OrderNo==null ?"":t2.OrderNo}; 
+0

仍给我只匹配的记录。 – Anup 2014-10-07 11:25:39

+0

我得到错误'铸造值类型'System.Int32'失败,因为物化值为空。结果类型的泛型参数或查询必须使用可空类型.' – Anup 2014-10-07 11:43:08

+0

@Anup立即尝试检查null条件 – Amit 2014-10-07 11:45:12

1
var query = from t1 in ctx.tblEmp 
        join t2 in ctx.tblHelp on t1 equals t2.Fld into tempGroup 
        from subpet in tempGroup.DefaultIfEmpty() 
        select new { t1.Labelname, OrderNo = (subpet == null ? String.Empty : subpet.OrderNo) };