Mongo C#Driver OData问题“不支持项目后谓词的位置”

时间:2013-01-10 08:36:38

标签: mongodb c#-4.0 asp.net-web-api odata

请求:/ api / person?$ filter使用服务器备份方法命名eq'John' return repo.GetAll()。选择(o => Mapper.Map<> PersonDTO>(o));

只有$ filter请求错误输出“不支持项目后的谓词位置”,但$ top / $ skip / $ orderby正常工作。我的猜测是,Mongo C#在生成查询时有一个错误&应用过滤器之前的项目。相反,它应首先应用过滤器然后再应用项目。我使用的是OData 5.2.0-rc1和Mongo C#驱动程序是1.7。

非常感谢任何投入。谢谢......

1 个答案:

答案 0 :(得分:0)

这是Linq当前实施的一个限制。我们正在努力通过此票证纠正错误:https://jira.mongodb.org/browse/CSHARP-601

但是,我鼓励你弄清楚你实际上在做什么。在过滤器之前进行投影可能意味着您要对计算表达式进行过滤,例如一起添加2列。 MongoDB查询不支持这种类型的行为,这就是我们的linq提供程序目前不允许这样做的原因。聚合框架允许这一点,但聚合框架强加了一组不同的限制。

在您的特定情况下,您希望我们做的事情是不可能的。您要求我们了解如何基于AutoMapper生成的对象创建MongoDB查询。除非我们(在运行时)读取AutoMapper映射并将其应用于我们的内部类模型,否则这根本不可能。