Каков результат вашего ToList()
? Это список объектов некоторого анонимного класса, который содержит данные, извлеченные из вашей последовательности JobDegrees
Всякий раз, когда вы хотите использовать Enumerable.Select
для последовательности объектов, вам сначала нужно назвать идентификатор, представляющий один элемент вашей последовательности. Этот идентификатор является частью перед =>
. После =>
вы напишите код для возврата одного объекта, используя этот входной идентификатор.
Это сложный способ сказать что-то вроде:
IEnumerable<Person> myPersons = ...
var firstNames = myPersns.Select(person => person.FirstName);
Здесь person
перед =>
представляет один элемент вашей коллекции Persons
. Следовательно, person
кажется правильным именем для этого идентификатора.
Если вы хотите, вы можете использовать любой идентификатор для идентификации person
, хотя не все идентификаторы улучшат читабельность:
var firstNames = myPersns.Select(x => x.FirstName);
При использовании LINQ и платформы сущностей рекомендуется идентифицировать коллекции с существительными во множественном числе и элементы коллекций с существительными в единственном числе.
После =>
вы пишете некоторый код, который использует этот ввод person
, чтобы вернуть ровно один объект. В этом примере FirstName
из person
.
Вернуться к вашему вопросу
Результатом вашего ToList
является последовательность объектов с DegreeCode
и DegreeName
.
Если вы хотите преобразовать каждый объект в вашей последовательности в один другой объект (это называется проекцией), вам придется идентифицировать один объект в вашей последовательности перед '=>'.
Например
...ToList()
.Select(extractedDegreeData => ...)
Здесь каждый extractedDegreeData
соответствует одному элементу вашего списка.
Теперь, что вы хотите сделать с одним таким extractedDegreeData
? Вы хотите вернуть возвращаемое значение Mapper.Map<JOBDEGREE, JobDegreeDTO>(extractedDegreeData)
.
Поэтому ваш код должен выглядеть так:
...ToList()
.Select(extractedDegreeData => Mapper.Map<JOBDEGREE, JobDegreeDTO>(extractedDegreeData));
Совет:
При создании запроса LINQ не используйте такие функции, как ToList
, или любые другие функции, которые не возвращают IEnumerable<TResult>
, это пустая трата вычислительной мощности. Что если после вашего Select
вы бы поставили Take(2)
? Какая трата, чтобы создать полный список из 1000 элементов, если вы хотите только первые два!
Поэтому такие функции, как ToList
, FirstOrDefault
, Max
, Count
всегда должны быть последними в вашем запросе linq.
Наконец: dbContext.JobDegrees
- это DbSet<JobDegree>
, который реализует IQueryable<JobDegree>
, следовательно, нет необходимости использовать AsQueryable
.