左外加入Linq无法正常工作

时间:2015-08-28 20:07:51

标签: c# linq datatable

我正在尝试在Linq中进行左外连接,但下面的代码无法正常工作

 var result = from dataRows1 in agdt.AsEnumerable()
              join dataRows2 in hwt.AsEnumerable()
              on dataRows1.Field<string>("ID") equals dataRows2.Field<string>("HWID") 
              where ((dataRows2.Field<string>("HWID") == null) && 
                    (dataRows1.Field<string>("TYPE")=="a"))
              select dataRows1;

如果没有where子句,我收到大约37000行,并且使用它我收到0. agdt表有12000行,hwt表有6000.这非常令人沮丧。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您错过了DefaultIfEmpty方法调用。

根据我的查询理解,它应该类似于:

var result = from dataRows1 in agdt.AsEnumerable()
          join dataRows2 in hwt.AsEnumerable()
          on dataRows1.Field<string>("ID") equals dataRows2.Field<string>("HWID") 
          into groupJoin
          from leftOuterJoinedTable in groupJoin.DefaultIfEmpty()
          where (leftOuterJoinedTable == null && 
                (dataRows1.Field<string>("TYPE")=="a"))
          select dataRows1;

答案 1 :(得分:0)

在我看来,这实际上与运行以下SQL查询相同

选择      DR1。* 从DataRows1 DR1 INNER JOIN DataRows2 DR2      ON DR1.ID = DR2.HWID 哪里      DR2.HWID为空      和      DR1.Type =&#39;一个&#39;

基本上你的LINQ正在进行内连接,然后执行where。要真正进行左连接,请参阅链接

LEFT OUTER JOIN in LINQ