Получение только некоторых столбцов в классе DTO из таблицы с помощью Entity Framework - PullRequest
0 голосов
/ 30 ноября 2018

Я использую Entity Framework с C #.У меня есть таблица Студента в моей базе данных, и она имеет 30 столбцов .И я хочу получить только некоторые столбцы таблицы, которые находятся в классе DTO без записи имен свойств , как показано ниже.Как мне этого добиться?

Мой класс DTO:

public class StudentDTO()
{
    public long Name{ get; set; }
    public long Surname{ get; set; }
    public DateTime BirthDate{ get; set; }
    public int StudentNumber{ get; set; }
}

Я ищу что-то вроде этого:

context.Students.Select(p=> new StudentDTO
{
  ????? StudentDTO.AllProperties  ?????
}).ToList();

Пожалуйста, не советуйте ниже решениепотому что это не то, что я ищу.

context.Students.Select(p => new 
                             {
                                 p.Name,
                                 p.Surname,
                                 p.BirthDate,
                                 p.StudentNumber
                             }).ToList();

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Я нашел решение из комментария @AlexanderDerck.ProjectTo метод AutoMapper решить мою проблему. docs.automapper.org / ru / stable / Queryable-Extensions.html

0 голосов
/ 30 ноября 2018

Вы пробовали Automapper?Пока имена свойств в вашем DTO совпадают с именами в контексте EF, вы можете это сделать.И когда вы добавляете свойства в свой DTO, они будут автоматически переводиться.

Если имена / типы не совпадают между контекстом DTO и EF, может потребоваться дополнительная настройка в вашем профиле сопоставления.

Вот упрощенный пример.

 class Program
{
    static void Main(string[] args)
    {
        var mapperConfiguration = new MapperConfiguration(cfg => cfg.AddProfile<MappingProfile>());
        var mapper = mapperConfiguration.CreateMapper();

        var fullStudent = new FullStudent()
        {
            Name = "Mike",
            Surname = "Magoo",
            BirthDate = DateTime.Now,
            StudentNumber = 1,
            Grade = "Freshman",
            PhoneNumber = "555-5555"
        };

        var limitedStudent = mapper.Map<StudentDTO>(fullStudent);

        Console.ReadKey();
    }
}

public class FullStudent
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public DateTime BirthDate { get; set; }
    public int StudentNumber { get; set; }

    public string Grade { get; set; }

    public string PhoneNumber { get; set; }
}

public class StudentDTO
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public DateTime BirthDate { get; set; }
    public int StudentNumber { get; set; }
}

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<FullStudent, StudentDTO>();
    }
}

Automapper может быть установлен как пакет nuget.

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