2011-05-17 112 views
0

如果有更好的方法可以做到这一点,请告诉我,但这是我设想的方式。可以做到吗?我可以用查询结果创建一个新对象吗?

Customer是数据库/ datacontext中的表。我想要的是查询该表并使用它建立一个新的对象。

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

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; 
} 

是有一些方法来做到这一点?

+0

为什么?你想做什么? – SLaks 2011-05-17 01:46:09

+0

您是否试图从查询中获得1位客户? – user670800 2011-05-17 01:50:28

+0

是的。最后我会想从数据库信息中建立对象(使用查找表中的数据设置属性)。因此,下一个问题可能涉及继承此对象:) – Sinaesthetic 2011-05-17 01:56:23

回答

6

是的,是这样的:

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, 
    }; 
+0

显然,查询返回与表(类是从哪里来的)相同的类型,所以我还发现客户cust =(从db.Customer中的.etc等);也适用。为一个对象添加.Single()或执行Customer []来构建对象集合。真是太酷了。我假设返回一个较小的结果表的查询成为表类类型的子元素。 – Sinaesthetic 2011-05-17 02:18:34

+1

你应该看看Linqpad,它可以让你玩linq w/o构建一个完整的应用程序。它是neet。 – 2011-05-17 02:22:41

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

如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击“代码示例”按钮(“{}”)在编辑器工具栏上进行恰当的格式化和语法突出显示! – 2011-05-18 05:04:13

0

有没有内置的方法以克隆方式对象你想要

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(); 

除了这种方法您可以添加一个新的Customer构造函数,将Customer作为参数来执行此操作,或添加辅助程序进行克隆。

最后,你可以考虑使用AutoMapper

相关问题