我可以使用查询结果创建一个新对象吗?

本文关键字:一个 新对象 对象 可以使 查询 结果 我可以 创建 | 更新日期: 2023-09-27 17:56:32

如果有更好的方法可以做到这一点,请告诉我,但这是我的设想。能做到吗?

客户是数据库/数据上下文中的表。我想要的是查询该表并用它构建一个新对象。

如果我要插入一条记录,我会做这样的事情:

Customer cust = new Customer(){ FirstName = "A", LastName = "B", Age = 31 }
db.Customers.InsertOnSubmit(cust);
db.SubmitChanges();

我想做的是用查询结果实例化该对象。像这样:

var query =
     from a in db.Customers
     where a.FirstName == "A"
     select a;
Customer cust = new Customer(){ query };

甚至

Customer cust = new Customer(){
     from a in db.Customers
     where a.FistName == "A"
     select a;
}

有没有办法做到这一点?

我可以使用查询结果创建一个新对象吗?

是的,像这样:

var query =  from c in db.Customers
     where c.FirstName == "somecriteria"
     select new Customer()
     {
        FirstName = "somevalue",
     };

你也可以制作完全匿名的对象...

var query =  from c in db.Customers
     where c.FirstName == "somecriteria"
     select new() 
     {
        FirstName = c.SomeProperty,
        AnotherProperty=c.AnotherProperty,
     };

没有内置的方法可以按照您想要的方式克隆对象

db.Customers
    .Where(x => x.FirstName ="A")
    .Select(x => new Customer
        {
           FirstName = x.FirstName,
           LastName = x.LastName,
           ...
           Id = default(x.Id.GetType()) // or copy the Id if you want it
        })
    .First();

除了此方法之外,您还可以添加一个新的客户构造函数,该构造函数将客户作为参数来执行此操作,或者添加用于克隆的帮助程序。

最后,您可以考虑为此使用自动映射器。

db.Customers
    .Where(x => x.FirstName == "A")
    .Select(x => new Customer{ FirstName =x.FirstName , LastName = x.LastName, Age = x.Age})
    .FirstOrDefault();