Результат заказа с использованием LINQ и типа приведения - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь заказать список и взять предмет top . Я не могу установить тип, который мне нужен.


var testFiles = new List<FileProcessing>();
testFiles = GetAll(var1, var2, var3, var3);

result = testFiles.OrderByDescending(item => item.DateRowAdded).Take(1);
return result;

У меня ошибка времени компиляции

Невозможно неявно преобразовать тип 'System.Collections.Generi c .IEumerable в' myType '.

1 Ответ

3 голосов
/ 04 апреля 2020

Ну, .Take(size) возвращает IEnumerable<T> (не один T) размера не более size. Таким образом, вы можете указать либо

 var array = testFiles
   .OrderByDescending(item => item.DateRowAdded)
   .Take(1)
   .ToArray();

 return array.Length > 0
   ? array[0]
   : SomeCustomDefaultValue; // when testFiles is empty

, либо

 return testFiles
   .OrderByDescending(item => item.DateRowAdded)
   .FirstOrDefault(); // when testFiles is empty

Обратите внимание, что 2-я версия, являющаяся краткой, не позволяет предоставлять (в общем случае) пользовательское значение по умолчанию.

Наконец, если testFiles (очень) long и, следовательно, сортировка (OrderByDescending) медленная и занимает много памяти, вы можете попробовать Aggregate:

 return testFiles
   .Aggregate((bestSoFar, current) => bestSoFar.DateRowAdded > current.DateRowAdded 
      ? bestSoFar
      : current);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...