CS1061: IEnumerable‹DB-entity-model› не содержит определения для 'OrderByDescending()'

Модель БД: root/ Entities/ ThreadEntity.cs .

корень/Данные/IThreadEntity.cs

IEnumerable<ThreadEntity> GetLatestThreads(int amount); // to get/ load at once.

root/ Controllers/ ThreadController.cs, HomeController.cs и т. д.

В последнем:

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IThreadEntity _threadEntityService;

    public HomeController(ILogger<HomeController> logger, IThreadEntity threadEntityService)
    {
        _logger = logger;
        _threadEntityService = threadEntityService;
    }

    private HomeIndexModel BuildHomeIndexModel()
    {
        var latestThreads = _threadEntityService.GetLatestThreads(amount: 10);
        //...
    }
//...
}

корень/Службы/ThreadService.cs

public class ThreadService : IThreadEntity
{
//...
    public IEnumerable<ThreadEntity> GetLatestThreads(int amount)
    {
        return GetAll().OrderByDescending<ThreadEntity> (thread => thread.CreatedAt).Take(amount);
    }
//...
}

у меня тут ошибка

CS1061: IEnumerable<ThreadEntity> не содержит определения для "OrderByDescending", и не удалось найти метод расширения "OrderByDescending", принимающий первый аргумент типа IEnumerable<ThreadEntity>.

Я уже проверил код ошибки на msdn. Что мне не хватает? Вот остальная часть моего кода, если она поможет.


person Zsombor V    schedule 11.05.2021    source источник
comment
Проверьте, есть ли у вас using System.Linq;   -  person arunes    schedule 11.05.2021
comment
@arunes Да, знаю. Это было первое, что я проверил.   -  person Zsombor V    schedule 11.05.2021


Ответы (1)


Enumerable.OrderByDescending занимает 2 параметра типа: это OrderByDescending<TSource, TKey>.

Когда вы вызываете OrderByDescending<ThreadEntity>, вы передаете только 1 параметр типа. Метода OrderByDescending<T> не существует, поэтому вы получаете сообщение об ошибке.

Если вы хотите указать параметры типа, вам нужно указать оба: OrderByDescending<ThreadEntity, T>, где T — это любой тип thread.Created.

Однако компилятор C# хорошо выводит параметры типа, поэтому вы должны просто написать:

return GetAll().OrderByDescending(thread => thread.Created).Take(a);
person canton7    schedule 11.05.2021
comment
У меня также был неправильный атрибут, он должен быть: thread.CreatedAt. Исправлено сейчас. - person Zsombor V; 11.05.2021