我正在尝试执行此代码:
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 :(得分:3)
看起来您正在加入来自两个不同上下文的数据:tms和实体。
这在LINQ中是不可能的,因为它们都有自己的数据库连接和完全独立的模型。
EF无法将其转换为SQL语句。 (据他所知,这些表可能存在于不同的数据库中)
您需要将所有实体移动到单个上下文或分别执行两个查询,然后将它们连接到内存中。 (如果所有表都在同一个数据库中,则使用第一个选项,如果有单独的数据库,则使用第二个选项)
答案 1 :(得分: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);
}