0

请求:/api/person?$filter Name eq 'John' 带有返回 repo.GetAll().Select(o => Mapper.Map<>PersonDTO>(o)) 的服务器备份方法;

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

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

4

1 回答 1

0

这是当前 Linq 实现的一个限制。我们正在努力通过这张票来纠正这个问题:https ://jira.mongodb.org/browse/CSHARP-601 。

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

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

于 2013-01-10T14:36:41.210 回答