C# 获取查询时包含在其他数据错误上下文中定义的引用do元素

C# 获取查询时包含在其他数据错误上下文中定义的引用do元素,c#,linq,C#,Linq,我在DataGridView方面遇到了一些问题。 我有两个LINQ问题: var query = from x in db.grupyTowarowes where x.typ == typMoneta select new { x.grupa }; var test = from z in dbContext.Pick

我在
DataGridView
方面遇到了一些问题。 我有两个LINQ问题:

var query = from x in db.grupyTowarowes
            where x.typ == typMoneta
            select new
                   {
                      x.grupa
                   };

var test = from z in dbContext.Pick
           join g in db.grupyTowarowes on z.Group equals g.grupa
           where z.Number == 1000 && g.typ == typMoneta
           select new
                  {
                      z.Group
                  };
然后我设置
数据源

dataGridView1.DataSource = test;
查询可能工作正常(查询没有任何错误),但绑定DataGridView时出现了一些错误,我得到的错误是:

查询包含在其他数据上下文中定义的引用do元素

这很奇怪,因为当我设置:

dataGridView1.DataSource = query;
然后输出是正确的。

使用ToList()


因为您在join中使用了两个数据上下文(
db
dbContext
),但是Linq不允许基于多个上下文的join

因此,您可以从一个源获取记录,对其进行迭代以与另一个源连接

var list1 = dbContext.Pick.ToList();
var list2 = db.grupyTowarowes.ToList();

var test = from z in list1
           join g in list2 on z.ID equals g.Id
           select new
           {
               z.A
           };
或者使用
AsEnumerable
实现查询将解决您的问题 :


使用
AsEnumerable
加载数据后,将使用Linq to对象对内存中已有的数据执行任何进一步的操作。

第二个查询的问题是,您正试图从下面指出的两个不同的数据库连接
,这是不可能的。更好的方法是,分别运行每个查询并执行
LINQ-Object
join以获得结果

from z in dbContext.Pick
           join g in db.grupyTowarowes
试试这个

dataGridView1.DataSource = new BindingList<String>(test.ToList());
dataGridView1.DataSource=newbindingslist(test.ToList());

可能是因为您使用的是两个不同的数据源。现在,查询执行了10分钟,但什么也没有发生。当我在没有可计算的情况下运行它时,查询将在15秒内执行,但在DGV@takiTamNick使用
AsEnumerable
加载数据后,将使用Linq to对象对内存中已有的数据执行任何进一步的操作。这就是为什么要花很长时间的原因。@Takitannick另外,你在join中使用了两个数据上下文(db,dbContext)你真的需要两个数据上下文吗?是的,因为我使用了两个不同的数据库我们看到了这一点,第一个没有给我任何结果,但当我检查诊断工具时,它开始占用内存-从19MB开始,到700MB结束(被我拦下)!结果还是不存在。
from z in dbContext.Pick
           join g in db.grupyTowarowes
dataGridView1.DataSource = new BindingList<String>(test.ToList());