#c# #mongodb #sorting
Вопрос:
Я использую драйвер Mongo C# для фильтрации таблицы данных. Поле местоположение (строка города) может быть пустым, и при сортировке в порядке возрастания сначала появляются результаты с пустым местоположением. Я хотел бы сначала отсортировать все, что имеет местоположение, и поместить те, у которых нет местоположения (null), в конец списка, поэтому при сортировке в порядке возрастания список всегда будет начинаться с местоположений A-Z. Фильтр довольно сложный, поэтому он использует конструктор фильтров и переходит к сортировке здесь.
Кто-нибудь знает способ указать сортировке, чтобы поместить нулевые значения в конец сортировки, используя библиотеку C# Mongo? Я использую самую последнюю версию библиотеки. Я пробовал все виды: проекции и сведение результата к нулю (не поддерживается), и, похоже, ничего не работает.
Я мог бы получить два набора данных и склеить их вместе, но это кажется действительно грязным и, возможно, моим последним средством.
Я долго гуглил и, похоже, не могу найти никого, кто бы это сделал.
Любая помощь будет признательна.
var jobsResults = await collection.FindAsync(filter, new FindOptionslt;MongoJobgt; { Limit = criteria?.Take, Skip = criteria?.Skip, Sort = criteria?.SortByDirection == "asc" ? new SortDefinitionBuilderlt;MongoJobgt;().Ascending(x =gt; x.Location) : new SortDefinitionBuilderlt;MongoJobgt;().Descending(x =gt; x.Location), Collation = new Collation("en", strength: CollationStrength.Secondary) });
Ответ №1:
Попробуй это:
var jobsResults = await collection.FindAsync(filter, new FindOptionslt;MongoJobgt; { Limit = criteria?.Take, Skip = criteria?.Skip, Sort = criteria?.SortByDirection == "asc" ? new SortDefinitionBuilderlt;MongoJobgt;().Ascending(x =gt; x.Location ?? "zzzzzz") : new SortDefinitionBuilderlt;MongoJobgt;().Descending(x =gt; x.Location ?? "zzzzzz"), Collation = new Collation("en", strength: CollationStrength.Secondary) });
Комментарии:
1. Вы это проверяли?
2. Увы, Linq не допускает коалесинга