Есть ли возможность сортировать результаты MongoDB с помощью лямбда-выражения - PullRequest
1 голос
/ 23 октября 2019

У меня есть интерфейс с несколькими реализациями, и одна из реализаций использует БД Mongo. Метод, который я пытаюсь реализовать, имеет параметр лямбда-выражения, который мне нужно использовать для сортировки данных, найденных в MongoDB. Для сортировки MongoDB требуется SortDefinition, но у меня есть только лямбда-выражение. Можно ли как-то преобразовать это лямбда-выражение в SortDefinition?

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

Для этого конкретного кода я получаю сообщение об ошибке, в котором говорится, что не удается преобразовать лямбда-выражение в SortDefinition.

1 Ответ

1 голос
/ 24 октября 2019

Вы можете прочитать свой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...