Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ查询中的Where子句在vb.net中无法识别?_Vb.net_Linq - Fatal编程技术网

LINQ查询中的Where子句在vb.net中无法识别?

LINQ查询中的Where子句在vb.net中无法识别?,vb.net,linq,Vb.net,Linq,以下Where子句中无法识别实体字段。VB错了吗 Dim projects = context.projects .OrderBy(Function(x) x.name) .Select(Function(x) {x.id, x.name}) .Where(Function(x) x.id <> sourceid) 如果我把Where关掉,它就可以正常工作了。另外,如果我翻转Where和Ord

以下Where子句中无法识别实体字段。VB错了吗

Dim projects = context.projects
               .OrderBy(Function(x) x.name)
               .Select(Function(x) {x.id, x.name})
               .Where(Function(x) x.id <> sourceid)

如果我把Where关掉,它就可以正常工作了。另外,如果我翻转Where和OrderBy,Where是可以的,但是现在OrderBy失败了。

请尝试下面的代码片段

Dim projects = context.projects.Where(Function(x) x.id <> sourceid).OrderBy(Function(x) x.name).Select(Function(x) {x.id, x.name})
试试这个:

Dim projects = context.projects
                               .OrderBy(Function(x) x.name)
                               .Select(Function(x) New With {x.id, x.name})
                               .Where(Function(x) x.id <> sourceid)
New With关键字应创建匿名类型的IEnumerable。然后,您可以使用Where子句中的id属性,而无需更改操作顺序

没有任何东西可以阻止您按顺序执行操作OrderBy,Select,Where。上面的代码肯定会编译并运行。但是,从逻辑上讲,您需要在选择之前执行Where,因为前者是一个过滤操作,而后者是一个投影。

这个{x.id,x.name}很可能是一个对象数组,假设id是整数,name是字符串,VB将推断对象。它不是具有id和name属性的类的实例@shree.pat18解释了如何调整它以返回您想要的内容,但为了清晰起见,我建议使用查询语法,并且将where子句放在Select之前应该稍微快一点,因为它不会根据不需要包含在结果中的值创建匿名对象:

Dim projects = From p In context.projects
               OrderBy p.name
               Where p.Id <> sourceid
               Select Id = p.Id, Name = p.Name

确切的错误消息是什么?@DanPuzey-无法解析select子句之前需要的符号“id”Where子句。@bowlturner-这只是VB.NET的问题吗?我最初是用C编写的,效果很好。好问题,我只知道它应该在哪里,OrderBy,Select,也许你改变了一些你在转换到VB时没有意识到的东西?多加一对括号可能会有很大的不同。@bowlturner不,它不会-我怀疑问题在于Select执行的类型更改。啊,是的,VB的松散键入可能是原因