2015-07-01 81 views
0

我試圖做到這一點代碼中的錯誤:同時做一個連接LINQ查詢

public ActionResult JoinSupToPro() 
    { 

     SupplierDBContext dbS = new SupplierDBContext(); 
     var innerJoinQuery = from pro in db.Products join sup in dbS.Suppliers on pro.SupplierId equals sup.ID 
     select new {Name= pro.Name,Price =pro.Price, SupplierName =sup.Name , Phone =sup.Phone}; 
     IndexModel m = new IndexModel(); 
     foreach (var item in innerJoinQuery) 
     { 
      SupplierProduct p = new SupplierProduct(); 
      p.SupplierName = item.SupplierName; 
      p.Phone = item.Phone; 
      p.Price = item.Price; 
      p.ProductName = item.Name; 
       m.MenuItems.Add(p); 
     } 

     return View(m.MenuItems.ToList()); 
    } 

我得到這個問題: 指定的LINQ表達式包含對與不同上下文關聯的查詢引用。 有什麼建議嗎?

+0

哪一行是拋出錯誤? – ekad

+0

的MenuItems是產品類IndexModel列表:我需要列出,所以我可以在以後顯示出他們在視圖 – 2D3D

+0

試着在你第一次查詢結束 –

回答

3

看起來你是從兩個不同的上下文中加入數據:TMS和實體。

這是不可能的LINQ既擁有自己的數據庫連接和一個完全獨立的模型。

這是不可能的EF轉換成SQL語句這一點。 (所有它知道,表可以生活在一個不同的數據庫)

你需要要麼所有的實體移動到一個單一的環境或單獨執行這兩個查詢,然後在內存中加入他們的行列。 (使用第一個選項,如果所有表都在同一個數據庫,使用第二個,如果你有不同的數據庫)

+0

我需要第二個選項,我沒有看到2個查詢,你能解釋一下嗎? – 2D3D

+0

看來你有兩個dbcontext(db&dbs)。合併它們。 –

0

工作時,我發現,要解決我的答案是分離的2個查詢,然後將它們之間的連接,像這樣:

public ActionResult JoinSupToPro() 
    { 

     List<Supplier> dbS = new SupplierDBContext().Suppliers.ToList(); 
     List<Product> prod = db.Products.ToList(); 
     var innerJoinQuery = from pro in prod join sup in dbS on pro.SupplierId equals sup.ID 
     select new {Name= pro.Name,Price =pro.Price, SupplierName =sup.Name , Phone =sup.Phone}; 
     IndexModel m = new IndexModel(); 
     m.MenuItems = new List<SupplierProduct>(); 
     foreach (var item in innerJoinQuery) 
     { 
      SupplierProduct p = new SupplierProduct(); 
      p.SupplierName = item.SupplierName; 
      p.Phone = item.Phone; 
      p.Price = item.Price; 
      p.ProductName = item.Name; 
       m.MenuItems.Add(p); 
     }