我试图返回一个foo id,其中bar处于活动状态,而baz(foobar)上的一个继承表具有与之关联的正确ID:请参阅下面的代码剪切。
var v = Utilities.newContainer()
.foo
.Select(f => new { f, fb = (f.baz as foobar) })
.Where(res => res.fb.Id1 == iId1
&& res.fb.Id2 == iId2
&& res.fb.Id3 == iId3
&& res.f.bar.IsActive)
.Select(res => new { res.f.Id })
.Single();
我这样做是为了避免为每次id比较而将baz作为foobar进行投射。
运行此查询时出现以下错误消息:
不支持使用表达式(f.baz As foobar)构造或初始化类型<> f__AnonymousType0`2 [foo,foobar]的实例。
如果我删除顶级匿名类型并投了3次,我可以让这个查询起作用,见下文。
var v = Utilities.newContainer()
.foo
.Where(f => (f.baz as foobar).Id1 == iId1
&& (f.baz as foobar).Id2 == iId2
&& (f.baz as foobar).Id3 == iId3
&& f.bar.IsActive)
.Select(f => new { f.Id })
.Single();
如何让顶级查询生效?
编辑: 将此问题与重复相关联的问题无法解决此问题。我没有投射到匿名类型的问题,因为工作查询已经这样做了。将.AsEnumerable()添加到查询将强制在缩小为Id之前返回整个f对象,我不想这样做。