我有一个工具对象的集合,我想选择性地过滤它们,并返回到网页上的分页表中。我已经让它与过滤器和分页一起工作,但我在排序时遇到了问题。我正在使用角度材料表,它允许用户在运行时选择排序字段和方向。
使用 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.id
、x.Name
、x.location
、x.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
以使用可配置字段?
我的问题是搜索字段使用了错误的大小写 - "描述"而不是"描述"。 一旦我通过了正确的案例,它就工作正常。