请求:/ 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。
非常感谢任何投入。谢谢......
答案 0 :(得分:0)
这是Linq当前实施的一个限制。我们正在努力通过此票证纠正错误:https://jira.mongodb.org/browse/CSHARP-601。
但是,我鼓励你弄清楚你实际上在做什么。在过滤器之前进行投影可能意味着您要对计算表达式进行过滤,例如一起添加2列。 MongoDB查询不支持这种类型的行为,这就是我们的linq提供程序目前不允许这样做的原因。聚合框架允许这一点,但聚合框架强加了一组不同的限制。
在您的特定情况下,您希望我们做的事情是不可能的。您要求我们了解如何基于AutoMapper生成的对象创建MongoDB查询。除非我们(在运行时)读取AutoMapper映射并将其应用于我们的内部类模型,否则这根本不可能。