MongoDB C# Сортирует последние нулевые значения

#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 не допускает коалесинга