2个数据表的左侧外部联接

本文关键字:外部 数据表 2个 | 更新日期: 2023-09-27 18:29:52

我想在C#中左联接两个数据表AllTimesTxnTableresolvedDt,其中我想要AllTimesTTxnTable中的每一行,并且只匹配resolvedDt中的行。

联接条件应基于midtxndate,最后在选择时,我希望从AllTimesTxnTable获得mid和txdata,从resolvedDt获得txncount,如果resolvedDt中没有记录,则为0。

我尝试了以下LINQ查询:

 var results = from table2 in AllTimesTxnTable.AsEnumerable()
               join table1 in resolvedDt.AsEnumerable()
               on new { mid = table2.Field<int>("mid"), txndate = table2.Field<string>("txndate") } equals new { mid = table1.Field<int>("mid"), txndate = table1.Field<string>("txndate") }
               into temp
               from leftTable in temp.DefaultIfEmpty()
               select new
               {
                    MId = (int)table2["mid"],
                    TxnDate = (string)table2["txndate"],
                    TxnCount = leftTable["txncount"] == null ? 0M : (decimal)leftTable["txncount"]
                };

但它在选择时给了我一个错误:Object reference not set to an instance of an object.

不知道这里出了什么问题。

2个数据表的左侧外部联接

更新了代码。它现在起作用了。

var results = from table2 in AllTimesTxnTable.AsEnumerable()
              join table1 in resolvedDt.AsEnumerable()
              on new { mid = table2.Field<int>("mid"), txndate = table2.Field<string>("txndate") } equals new { mid = table1.Field<int>("mid"), txndate = table1.Field<string>("txndate") }
              into temp
              from row in temp.DefaultIfEmpty()
              select new
              {
                   MId = (int)table2["mid"],
                   TxnDate = (string)table2["txndate"],
                   TxnCount = row == null ? 0M : (decimal)row["txncount"]
              };