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

时间:2016-07-23 18:48:45

标签: c# linq

我在{ "name": "nosetests", "type": "python", "request": "launch", "stopOnEntry": true, "program": "${workspaceRoot}/env/dev/bin/nosetests", "args": [ "--nocapture", "tests" ], "externalConsole": false, "debugOptions": [ "WaitOnAbnormalExit", "WaitOnNormalExit" ] }, 面临一些问题。 我有两个LINQ查询:

"python.pythonPath": "${workspaceRoot}/env/dev/bin/python"

然后我正在设置DataGridView

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
                  };

查询可能正常工作(查询没有任何错误)但是我在绑定DataGridView时遇到了一些错误,我得到的错误是:

  

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

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

DataSource

然后输出正确。

4 个答案:

答案 0 :(得分:2)

因为您在连接中使用了两个数据上下文(dbdbContext),但Linq不允许基于多个上下文的连接!

因此,您可以从一个来源获取记录,迭代它以与另一个来源联接;

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来实现您的查询将解决您的问题  :

 var test = from z in dbContext.Pick.AsEnumerable()
            join g in db.grupyTowarowes.AsEnumerable() on z.Group equals g.grupa
            where z.Number == 1000 && g.typ == typMoneta
            select new
            {
                z.Group
            };

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

答案 1 :(得分:0)

使用ToList()

dataGridView1.DataSource = test.ToList();

答案 2 :(得分:0)

您的第二个查询出现问题,您正尝试从两个不同的数据库中JOIN,如下所示,这是不可能的。更好的是,您单独运行每个查询并执行LINQ - Object联接以获得结果

from z in dbContext.Pick
           join g in db.grupyTowarowes

答案 3 :(得分:0)

试试这个

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