以下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
失败了。
答案 0 :(得分:3)
试试这个:
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
。然后,您可以使用id
子句中的Where
属性,而无需更改操作的顺序。
没有什么可以阻止您按顺序执行操作OrderBy
,Select
,Where
。上面的代码肯定会编译运行。但是,从逻辑上讲,您需要在Where
之前执行Select
,因为前者是过滤操作,而后者是投影。
答案 1 :(得分:2)
您能否尝试使用以下代码段。
Dim projects = context.projects.Where(Function(x) x.id <> sourceid).OrderBy(Function(x) x.name).Select(Function(x) {x.id, x.name})
答案 2 :(得分:0)
这个{x.id, x.name}
很可能是一个对象数组(假设id
是整数而name
是字符串,VB会推断出Object)。它不是属性为id
和name
的类的实例。 @ shree.pat18解释了如何调整它以返回你想要的东西,但我建议使用查询语法来清楚,并且在Select
之前放置你的where子句(应该稍快一点,因为它不会创建匿名结果中包含您不需要的值的对象:
Dim projects = From p In context.projects
OrderBy p.name
Where p.Id <> sourceid
Select Id = p.Id, Name = p.Name