使用 LinQ 通过Where子句对数据表进行左连接

问题描述 投票:0回答:1

我正在尝试使用 LinQ 对两个数据表执行左连接,其中有两个 WHERE 子句。这是代码片段:

我尝试过以下代码片段:

var resultList = (from p in mainlineQuery1.AsEnumerable()
                              join t in mainlineQuery4.AsEnumerable()//.Where(x => x.Field<string>("mainlineidc") == null)
                              on p.Field<string>("globalid") equals t.Field<string>("featureguid")                              
                              into tempJoin
                              from temp in tempJoin.DefaultIfEmpty()
                              where p.Field<string>("circuitid2") != null && temp.Field<string>("mainlineidc") == null
                              select new
                              {
                                  featClass = p.Field<string>("FeatureClass"),
                                  globalId = p.Field<string>("globalid"),
                                  circuitId = p.Field<string>("circuitid"),
                                  circuitId2 = p.Field<string>("circuitid2"),
                                  subtypecd = Convert.ToString(p.Field<decimal>("subtypecd")),
                                  operatingnumber = p.Field<string>("operatingnumber") //== string.Empty ? string.Empty : temp.Field<string>("mainlineidc")
                              }).ToList();

记录数与 SQL Developer 记录不匹配。

任何帮助将不胜感激!!

linq datatable left-join
1个回答
0
投票

通过将代码更改为来修复它:

var resultList = (from p in mainlineQuery1.AsEnumerable()
                              join t in mainlineQuery4.AsEnumerable()
                              on p.Field<string>("globalid") equals t.Field<string>("featureguid")                              
                              into tempJoin
                              from temp in tempJoin.DefaultIfEmpty()
                              where p.Field<string>("circuitid2") != null 
                              select new
                              {
                                  featClass = p.Field<string>("FeatureClass"),
                                  globalId = p.Field<string>("globalid"),
                                  circuitId = p.Field<string>("circuitid"),
                                  circuitId2 = p.Field<string>("circuitid2"),
                                  subtypecd = Convert.ToString(p.Field<decimal>("subtypecd")),
                                  operatingnumber = p.Field<string>("operatingnumber"),
                                  mainlineidc= temp == null ? null: temp.Field<string>("mainlineidc")
                              }).Where(x=> string.IsNullOrEmpty(x.mainlineidc)).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.