2013-01-10 46 views
0

请求:/ api/person?$ filter名称具有服务器备份方法的eq'John' return repo.GetAll()。Select(o => Mapper.Map <> personDTO>(o));Mongo C#驱动程序OData问题“不支持项目之后的谓词”

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

任何输入,非常感谢。谢谢...

+0

你检查了[source](https://github.com/mongodb/mongo-csharp-driver)吗?官方文件没有提到对此的支持。有几个开源的odata实现你可以看看。 – WiredPrairie

回答

0

这是Linq当前实施的限制。我们正在努力改正这张票:https://jira.mongodb.org/browse/CSHARP-601

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

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