【问题标题】:An error while doing a join linq query执行连接 linq 查询时出错
【发布时间】:2015-07-01 15:11:32
【问题描述】:

我正在尝试执行此代码:

    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 表达式包含对与不同上下文关联的查询的引用。 有什么想法吗?

【问题讨论】:

  • 哪一行报错了?
  • MenuItems 是 IndexModel 类中的产品列表:我需要将其列出,以便稍后在视图中显示它们
  • 尝试在第一个查询的末尾添加 ToList()
  • 如果有帮助请查看:stackoverflow.com/questions/898363/…

标签: c# html asp.net-mvc linq entity-framework


【解决方案1】:

看起来您正在连接来自两个不同上下文的数据:tms 和实体。

这在 LINQ 中是不可能的,因为它们都有自己的数据库连接和完全独立的模型。

EF 无法将其转换为 SQL 语句。 (据它所知,这些表可能存在于不同的数据库中)

您需要将所有实体移动到单个上下文或分别执行两个查询,然后将它们连接到内存中。 (如果所有表都在同一个数据库中,则使用第一个选项,如果您有单独的数据库,则使用第二个选项)

【讨论】:

  • 我需要第二个选项,我在这里看不到 2 个查询,您能解释一下吗?
  • 看来你有两个 dbcontext (db & dbs)。合并它们。
【解决方案2】:

在工作时,我发现我的答案的解决方案是将 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);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多