2015-07-01 50 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); 
     }