如何使用 C# 驱动程序以编程方式设置 MongoDB 查询上的排序字段?



我有一个工具对象的集合,我想选择性地过滤它们,并返回到网页上的分页表中。我已经让它与过滤器和分页一起工作,但我在排序时遇到了问题。我正在使用角度材料表,它允许用户在运行时选择排序字段和方向。

使用 MongoDB C# 驱动程序,我构建了一组与 theFilter 匹配的工具(fo = find options = 不区分大小写(。跳过和限制提供分页 - 我知道这对于大型集合不一定有效,这不是这里的问题 - 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 表达式时,我才能使排序工作。我如何修复 lambda 表达式以使用可配置字段;或者在这种情况下,正确使用.Sort以使用可配置字段?

我的问题是搜索字段使用了错误的大小写 - "描述"而不是"描述"。 一旦我通过了正确的案例,它就工作正常。

最新更新