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



我有一个包含多个实现的接口,其中一个实现是使用Mongo DB。我试图实现的方法有一个paramenter 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。

您可以读取Expression以获取字段名称,然后将排序定义构建为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

最新更新