Как привести результат IQueryable / IEnumerable к пользовательской модели C # EntityFramework - PullRequest
0 голосов
/ 12 мая 2019

Допустим, у меня есть репозиторий с этой функцией

public async Task<IEnumerable<Contacts>> GetAll()
 {
     return await _context.Contacts.ToListAsync();
 }

, где сущность «Контакты» - та же самая, которая отвечает на вызов.Но я не хотел использовать один и тот же класс, потому что есть некоторые поля, которые я бы хотел не пускать в вызов.Есть какой-то способ, которым я мог бы «зеркалировать» вторую модель, называемую «ContactsModel», чтобы возвращать данные без использования анонимных вызовов, таких как:

var result = context.t_validation.Where(a => a.isvalidated == 10).Select(x => new
                {
                    x.date_released,
                    x.utoken,
                    x.Images,
                    x.images_key,
                    x.Type
                });

Зацикливание и переход к этой новой модели:

foreach (var item in list)
                {
                    decp.Add(new ValidationModel
                    {
                        uToken = item.utoken,
                        Date = item.date_released,
                        Images = bc.Decrypt(item.Images, item.images_key),
                        Type = item.Type
                    });
                }

Спасибо!

1 Ответ

2 голосов
/ 12 мая 2019

Поскольку вы используете собственный метод для расшифровки изображения, вы не сможете включить его в запрос, потому что EF не сможет перевести его в SQL-запрос.

Анонимный подход будет лучшим

public async Task<IEnumerable<Contacts>> GetAll()
{
    var models = await _context
        .Contacts
        .Select(contact => new
        {
            contact.date_released,
            contact.utoken,
            contact.Images,
            contact.images_key,
            contact.Type        
        })
        .ToListAsync()

    return models
        .Select(item => new ValidationModel
        {
            uToken = item.utoken,
            Date = item.date_released,
            Images = bc.Decrypt(item.Images, item.images_key),
            Type = item.Type
        }
        .ToList();   
}

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

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