Используйте метод для создания нового объекта C # - PullRequest
0 голосов
/ 27 августа 2018

[Я отредактировал свой POST, затем, пожалуйста, перепроверьте его]

Я создаю веб-API ASP.NET MVC.Затем с этим кодом мне приходится многократно использовать код "new Child {...}".И я застрял в поиске решений.Пожалуйста, скажите мне, как использовать метод создания нового объекта в этом выражении lamba.Большое спасибо

public IEnumerable<Child> GetChildren()
    {
        return db.Children.AsEnumerable().Select(x => new Child { 
            Address = x.Address,
            ClassId = x.ClassId,
            DietId = x.DietId,
            Dob = x.Dob,
            FirstName = x.FirstName,
            Gender = x.Gender,
            Id = x.Id,
            LastName = x.LastName,
            ParentName = x.ParentName,
            ParentPhoneNumber = x.ParentPhoneNumber,
            TakingCareId = x.TakingCareId,
        });
    }

// GET: api/Children/5
    [ResponseType(typeof(Child))]
    public IHttpActionResult GetChild(int id)
    {
        Child child = db.Children.Find(id);
        if (child == null)
        {
            return NotFound();
        } else
        {
            Child c = db.Children.AsEnumerable().Where(x => x.Id == id).Select(x => new Child {
                Address = x.Address,
                ClassId = x.ClassId,
                DietId = x.DietId,
                Dob = x.Dob,
                FirstName = x.FirstName,
                Gender = x.Gender,
                Id = x.Id,
                LastName = x.LastName,
                ParentName = x.ParentName,
                ParentPhoneNumber = x.ParentPhoneNumber,
                TakingCareId = x.TakingCareId,
            }).FirstOrDefault();
            return Ok(c);
        }
        //return Ok(child);
    }

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Использование метода хорошо, хотя вы должны обязательно помнить об обновлении при добавлении новой переменной, которую вы хотите, чтобы ваш объект DTO имел.
Так что убедитесь, что он находится в правильном классе, предпочтительно в Child.учебный класс.Использование конструктора также хорошая идея, но это не всегда то, что вы хотите.Кроме того, вы можете захотеть взглянуть на Auto Mapper для более надежного отображения объектов DTO.

0 голосов
/ 27 августа 2018

Полагаю, вы запрашиваете данные через Entity Framework?Если это так, у вас есть два варианта, которые я обычно использую в наших приложениях:

  1. Создание объекта с помощью конструктора

    db.Children.Select(x => new ChildDTO(x));
    

ОдинНедостатком этого подхода является то, что вы всегда будете запрашивать все поля в вашей базе данных.Иногда это не имеет значения, иногда это имеет значение.Это зависит от вашего приложения и данных, которые вы храните.

Создание повторно используемого выражения

public static Expression<Func<Child, ChildDTO>> DefaultColumns {
    get {
        return c => new ChildDTO() {
            Id = c.Id,
            Address = c.Address,
            ...
        };
    }
}

db.Children.Select(DefaultColumns);

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

...