Сортировать список в порядке убывания по количеству массивов - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь отсортировать список данных, которые я получаю из своей базы данных, в порядке убывания по количеству голосов за каждую запись. Это то, что у меня есть, но не работает. ПРИМЕЧАНИЕ: поле upvotes представляет собой массив string [] внутри класса модели.

//Method to get all popular posts and display them in a list
    public async void GetPostInfo()
    {
        PostsMod = new ObservableCollection<IPosts>();
        var temp = await _postsProxy.GetAllPosts();

        if (temp != null)
        {
            if (temp.Count > 0)
            {
                var orderedList = temp.OrderByDescending(x => x.UpVoteId.Count()).ToList(); //Orders the records in descending order based on how many upvotes they contain, puts it into a new list

                foreach (var item in orderedList)
                {
                    PostsMod.Add(item);
                }
            }
            else
                PostsMod.Add(temp[0]);
        }
    }

Все сообщения помещаются в var temp, а затем в список temp должен быть упорядочен в порядке убывания по количеству подсчитанных голосов. Помните, что снова поле upvote представляет собой массив string [] в классе модели.

Появляется сообщение об ошибке: System. ArgumentNullException: «Значение не может быть нулевым. Имя параметра: source '

EDIT: извините, это была ошибка с моей стороны, я сделал глупую ошибку, когда поля в классе модели не совпадали. В результате мои голоса были нулевыми.

1 Ответ

0 голосов
/ 29 мая 2020

System.ArgumentNullException: 'Value cannot be null. Parameter name: source' происходит из нулевого IEnumerable <T>, переданного методу расширения Linq, единственный из вашего кода - Count .

Попробуйте это :

var orderedList = temp.OrderByDescending(x => x.UpVoteId?.Count()).ToList(); 

Это не удастся, поскольку temp.Count будет 0:

else
    PostsMod.Add(temp[0]);

При этом, хотя это и не является частью проблемы, вы не должны возвращать здесь null. Вы всегда должны получать коллекцию, пустую или нет, или выдавать исключение вместо того, чтобы проглотить ее.

if (temp != null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...