簡體   English   中英

如何使用 C# 驅動程序以編程方式在 MongoDB 查詢上設置排序字段?

[英]How do I programmatically set the sort field on a MongoDB query using the C# driver?

我有一個 Tool 對象的集合,我想選擇性地過濾這些對象,然后返回到網頁上的分頁表中。 我已經讓它與過濾器和分頁一起工作,但我在排序方面遇到了麻煩。 我正在使用 Angular Material 表,它允許用戶在運行時選擇排序字段和方向。

使用 MongoDB C# 驅動程序,我構建了一組與過濾器匹配的工具(fo = find options = 不區分大小寫)。 Skip 和 Limit 提供分頁 - 我知道這對於大集合不一定有效,這不是這里的問題 - ToList 將其發送到 API。

tools = _tools.Find<Tool>(theFilter, fo)
    .Sort(Builders<Tool>.Sort.Descending(x => x.Description))
    .Skip(pageNo * pageSize)
    .Limit(pageSize)
    .ToList();

在該示例中,Sort 調用按描述字段按降序正確對集合進行排序。 我需要能夠在運行時選擇不同的字段(例如x.idx.Namex.locationx.whatever ),並且能夠在降序和升序之間切換。

嘗試使用 MongoDB 的語法:

    .Sort("{ description: -1}")

失敗,嘗試使用字段名稱構建 SortDefinition 對象也是如此:

    private SortDefinition<T> BuildSortDefinition<T>(string fieldName, string sortDirection)
    {
        FieldDefinition<T> theField = new StringFieldDefinition<T>(fieldName);
        SortDefinition<T> theSort;

        if (sortDirection.ToLower() == "desc")
            theSort = Builders<T>.Sort.Descending(theField);
        else
            theSort = Builders<T>.Sort.Ascending(theField);

        return theSort;
    }

如果我使用 lambda 表達式,我只能使 Sort 工作。 如何修復 lambda 表達式以使用可配置字段; 或在這種情況下正確使用.Sort以使用可配置字段?

我的問題是在搜索字段中使用了錯誤的大小寫 - “描述”而不是“描述”。 一旦我通過了正確的案例,它就可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM