2016-01-12 153 views
0

我想在C#中左連接2個數據表AllTimesTxnTableresolvedDt,其中我希望AllTimesTxnTable中的每一行只有來自resolvedDt的匹配行。2個數據表的左外連接

條件應根據midtxndate最後的同時選擇我想中旬txndate從AllTimesTxnTable和txncount從resolvedDt,如果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.同時選擇。

沒有得到怎麼回事錯在這裏。

+3

你的問題有被關閉作爲[this]的重複的危險(http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-doi-i-fix - 它)着名的問題。 –

+0

堆棧跟蹤會有幫助嗎? –

+0

你至少使用的調試,以確保您所使用的數據表不是空在這一點? –

回答

1

更新的代碼。它的工作現在。

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"] 
       };