2013-01-10 44 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映射並將其應用到我們的內部類模型。