2013-10-07 215 views
-1

我一直在尋求答案這一個,但我仍然有問題,想知道我在做什麼錯表....左連接Linq中

我有我的MVC項目和正在使用LINQ獲取數據從我的數據庫中的兩個表。我需要離開加入第二臺但我得到一個錯誤

對象引用不設置到對象

的問題是在我的模型,特別是在工作臺的一個實例加入。這裏是我的代碼:

public void DATA(string searchString) 
     { 
      newList = new List<ResultsList>(); 

      var res = from f in searchDB.CUSTOMERS 

         join cd in searchDB.CUSTOMER_DETAILS 
         on f.cust_id equals cd.cust_id into grouped 
         from gr in grouped.DefaultIfEmpty() 

         where f.ProductName.Equals(searchString) 
         select new { f, gr }; 


     foreach (var item in surname) 
     { 
      ResultsList rl = new ResultsList(); 

      rl.Forename = item.f.Forename; 
      rl.Postcode = item.gr.postcode; 
      rl.ProductName = item.f.ProductName; 

      newList.Add(rl); 
     } 
    } 
+1

修正你的代碼。 *姓*的定義在哪裏? – dovid

回答

-5

對不起,它應該是「水庫」,但這不是問題。無論如何,我已經解決了。如果任何人有興趣,這是我如何做到這一點。

在foreach部分

,我添加了一個if語句,看看在連接表列是否爲空,然後應用我所需要的一切減去其他的聯接的列我用兩個表中所需的一切。

foreach (var item in res) 
     { 
      ResultsList rl = new ResultsList(); 

      if (item.gr != null) 
      { 
       rl.Forename = item.f.Forename; 
       rl.Postcode = item.gr.postcode; 
       rl.ProductName = item.f.ProductName; 
      } 
      else 
      { 
       rl.Forename = item.f.Forename; 
       rl.ProductName = item.f.ProductName; 

      } 
+4

你的問題問linq實體和​​左連接,但你忽略了建議的解決方案,並接受了你自己的答案,事實上並沒有直接回答你的問題(儘管它可能已經解決了你的問題) –

4

可以簡化代碼並獲得通過寫作擺脫for循環:

var rl = (from f in searchDB.CUSTOMERS 
      join cd in searchDB.CUSTOMER_DETAILS 
      on f.cust_id equals cd.cust_id into grouped 
      from gr in grouped.DefaultIfEmpty() 
      where f.ProductName == searchString 
      select new ResultsList 
      { 
       Forename = f.Forename, 
       Postcode = gr == null ? null : gr.postcode, 
       ProductName = f.ProductName 
      }).ToList(); 

它可能只Postcode = gr.postcode也行。取決於Linq數據庫提供者的智能程度。