копировать данные из одного списка в другой - PullRequest
0 голосов
/ 17 октября 2018

у меня есть два списка srsEmps и destEmps из классов

List<srsEmployee> srsEmps = db.srsEmployees.ToList();
List<destEmployee> destEmps = db2.destEmployees.ToList();

public class srsEmployee
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public string EmpCode { get; set; }
    public Nullable<decimal> Salary { get; set; }
    public Nullable<system.datetime> StartDate { get; set; }
    public Nullable<system.datetime> BOD { get; set; }
    public int DepartmentId { get; set; }
    public bool Active { get; set; }
    public virtual srsDepartment srsDepartment { get; set; }
}

public class destEmployee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string EmpCode { get; set; }
    public Nullable<decimal> Salary { get; set; }
    public Nullable<system.datetime> StartDate { get; set; }
    public Nullable<system.datetime> BOD { get; set; }
    public int DepartmentId { get; set; }
    public bool Active { get; set; }
    public virtual destDepartment destDepartment { get; set; }
 }

И это мое действие, и я хочу изменить метод .First, поскольку .First используется для поиска эквивалентного элемента (на основе Id) в другом списке, и я хочу скопировать все данные

       public ActionResult Deploy()
    {
        List<srsEmployee> srsEmps = db.srsEmployees.ToList();
        List<destEmployee> destEmps = db2.destEmployees.ToList();
        db2.Database.ExecuteSqlCommand("TRUNCATE TABLE [destEmployees]");
        foreach (var element in destEmps)
        {
            var oldValue = srsEmps.First(t => t.Id == element.Id);
            element.Name = oldValue.Name;
            element.EmpCode = oldValue.EmpCode;
            element.Salary = oldValue.Salary;
            element.StartDate = oldValue.StartDate;
            element.BOD = oldValue.BOD;
            element.DepartmentId = oldValue.DepartmentId;
            element.Active = oldValue.Active;
        }
        foreach (var item in destEmps)
        {
            db2.destEmployees.Add(item);
        }
        db2.SaveChanges();

        return View();
    }

Я хочу скопировать данные из srsEmps в destEmps, используя linq, так что если у меня есть в srsEmps = {emp1,emp2,emp3}я хочу скопировать все эти объекты в destEmps

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете преобразовать класс в другой, когда имена ваших свойств совпадают, точно так же как ваши классы.

1) Загрузите пакет nuget "Automapper".

2) Создайте свойПреобразовать класс AutoMapperProfile с помощью класса Profile пакета Automapper.

public class AutoMapperProfile : Profile
    {
        public AutoMapperProfile()
        {
            CreateMap<srsEmployee, destEmployee>();
        }
    }

3) Определить зависимость в Application_Start в Global.asax.

Mapper.Initialize(x =>
{
    x.AddProfile<AutoMapperProfile>();
});

4) Наконец, вы можете преобразовать список вдругой список.

List<srsEmployee> srsEmps = db.srsEmployees.ToList();

destEmps  = srsEmps.Select(x => Mapper.Map<destEmployee>(x))
                   .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...