使用oData webapi在linq查询中存储变量匿名类型

时间:2017-02-15 12:12:53

标签: c# linq asp.net-web-api ef-code-first odata

我试图返回一个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对象,我不想这样做。

0 个答案:

没有答案