Использование Automapper для возврата IQueryable

Я пытаюсь вернуть объект IQueryable в одной из моих функций и использую отображение (Automapper). Ему удается вернуть объект IEnumerable в порядке, но как только я пытаюсь вернуть объект IQueryable, он выдает мне ошибку:

Это ошибка:

Отсутствует конфигурация карты типов или неподдерживаемое сопоставление.

Типы сопоставления: LLBLGenProQuery1 -> CostCentre SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery1 [[Mail.DAL.EntityClasses.TblCostCentreEntity, Mail.DAL, Version = 1.0.4638.16064, Culture = нейтральный, PublicKeyToken = null]] -> Mail.Model.CostCentre

Путь назначения: CostCentre

Исходное значение: SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery`1 [Mail.DAL.EntityClasses.TblCostCentreEntity]

Это код:

Dim metaData As New LinqMetaData Dim q = From p In metaData.TblCostCentre _ Выбрать p Mapper.CreateMap (Of TblCostCentreEntity, CostCentre) ()

    Dim t As IEnumerable(Of CostCentre) = Mapper.Map(Of CostCentre)(q)
    'Select New CostCentre With {.Active = p.Active, .CostCentre = p.CostCentre, .CreatedBy = p.CreatedBy, .DateCreated = p.DateCreated, .DateLastModified = p.DateLastModified, .ModifiedBy = p.ModifiedBy, .CostCentreID = p.CostCentreId}

    Return t

person Baahubali    schedule 13.09.2012    source источник
comment
Обратитесь к этому вопросу для получения правильного решения.   -  person Alisson    schedule 25.01.2017


Ответы (2)


Чтобы Automapper действительно выполнил сопоставление, он должен видеть каждый элемент в IQueryable. После того, как вы перебрали запрашиваемый объект, он больше не доступен для запроса, поскольку он уже был запрошен.

person armen.shimoon    schedule 13.09.2012
comment
Эта ссылка объясняет это дополнительно (только для пользователей llblgen) - llblgen.com/tinyforum/ Messages.aspx? ThreadID = 17364 - person Baahubali; 04.10.2012
comment
Неправильно: решение можно найти на странице stackoverflow.com/a/12365931/178620. - person Doguhan Uluca; 08.02.2013

Для тех, кто может пропустить ссылку на комментарий, вы можете использовать [QueryableExtensions][1] Automapper, в частности ProjectTo. Например:

var collection = _db.Patients
     .ProjectTo<PatientDto>(_mapper.ConfigurationProvider);

Это создаст проекцию IQueryable из объекта db.

person Paul DeVito    schedule 28.02.2021