【问题标题】:Is there any possibility to sort MongoDB results using a lambda expression是否有可能使用 lambda 表达式对 MongoDB 结果进行排序
【发布时间】:2019-10-23 08:19:26
【问题描述】:

我有一个包含多个实现的接口,其中一个实现是使用 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】:

    您可以阅读您的 Expression 以获取字段名称,然后将您的 sortDefinition 构建为 BsonDocumentSortDefinition&lt;T&gt;

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多