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());