首页 > 解决方案 > 使用方法创建一个新对象C#

问题描述

[我已经编辑了我的帖子,请重新检查它]

我正在创建一个 ASP.NET MVC WEB API。然后使用此代码,我必须多次重用代码“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);
    }

标签: c#asp.net-mvcasp.net-web-apilambdaasp.net-web-api2

解决方案


我想您是通过实体框架查询数据?如果是这样,您有两个我在我们的应用程序中常用的选项:

  1. 通过构造函数构建对象

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

这种方法的一个缺点是您将始终查询数据库中的所有字段。有时这无关紧要,有时确实如此。这取决于您的应用程序和您存储的数据。

  1. 创建可重用的表达式

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

这种方法的优点是您可以只查询您需要的列。


推荐阅读