是否有可能使用lambda表达式对MongoDB结果进行排序

问题描述 投票:1回答:1

我有一个具有多个实现的接口,实现之一是使用Mongo DB。我尝试实现的方法有一个lambda表达式作为参数,我需要使用它来对在MongoDB中找到的数据进行排序。对于排序,MongoDB需要一个SortDefinition,但我所拥有的只是lambda表达式。 我可以将该lambda表达式转换为SortDefinition吗?

public IEnumerable<Car> GetDataSorted(Expression<Func<Car,string>> sortCriteria)
{
    var result = _mongoDBCollection.Find(filterCriteria);
    return result.sort(sortCriteria).ToList();
}

对于此特定代码,我收到一条错误消息,提示无法将lambda表达式转换为SortDefinition。

c# mongodb lambda mongodb-query mongodb-.net-driver
1个回答
1
投票

您可以阅读Expression以获取字段名称,然后将您的sortDefinition构建为BsonDocumentSortDefinition<T>

var body = sortCriteria.Body.ToString();
var parameter = sortCriteria.Parameters.First() + ".";
var fieldPath = body.Substring(parameter.Length);

SortDefinition<Car> sortDefinition = new BsonDocumentSortDefinition<Car>(
    new BsonDocument(){ { fieldPath, 1 } });

return result.Sort(sortDefinition).ToList();

适用于以下情况:

r.GetDataSorted(c => c.Name); // evaluates to Name
r.GetDataSorted(car => car.Name); // evaluates to Name
r.GetDataSorted(car => car.Nested.Field); // evaluates to Nested.Field
© www.soinside.com 2019 - 2024. All rights reserved.