【问题标题】:Mongo C# Driver OData issue "Where with predicate after a project is not supported"Mongo C# Driver OData 问题“不支持项目后的谓词在哪里”
【发布时间】:2012-12-24 14:11:13
【问题描述】:

请求:/api/person?$filter Name eq 'John' 使用服务器备份方法 return repo.GetAll().Select(o => Mapper.MapPersonDTO>(o));

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

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

【问题讨论】:

  • 你检查过source吗?官方文档没有提到对此的支持。您可以查看一些开源 odata 实现。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多