OData的限制(listed here)阻止我將動態where子句添加到來自OData源的數據集。我發現了一個previous post,它回答了我對動態過濾器的查詢,即將AddQueryOption方法與定製的查詢字符串一起使用。但是,似乎沒有辦法將此查詢字符串與標準LINQ查詢結合起來。將LINQ與OData結合使用AddQueryOption
使用上述方法產生一個有效的查詢:
https://api-dev.company.com/odata/Assets?$filter=(Levels/any(l:l/LevelId eq 18)) or (Levels/any(l:l/LevelId eq 19))
這具有被監守有不能運行時間之前來確定級別過濾器的可變數目和簡單地使用多個何處被動態地產生的原因條款生產「和」過濾器,而不是「或」過濾器,這樣的:
https://api-dev.company.com/odata/Assets?$filter=(Levels/any(l:l/LevelId eq 18)) and (Levels/any(l:l/LevelId eq 19))
我當前嘗試此方法後使用LINQ產生的輸出:
https://api-dev.company.com/odata/Assets?$filter=DisplayOnline and Status eq Tools.Services.Models.EPublishStatus'Active', and (Levels/any(l:l/LevelId eq 18)) or (Levels/any(l:l/LevelId eq 19))
請注意,第二個查詢只有它的錯誤是Levels過濾器和其他過濾器之間的逗號。
額外的Where子句如下:
// Filter by assets that can be displayed online
assets = assets.Where(a => a.DisplayOnline);
// Filter by assets that are active
assets = assets.Where(a => a.Status == EPublishStatus.Active);
我想知道是否有手動編輯字符串的方式或者如果有兩個查詢字符串生成方法相結合之有道。謝謝你的時間。