2012-08-08 122 views
2

我一直在考虑使用存储在数据库中的数据动态创建对象。我通过序列化每个对象的所有属性来完成类似的事情,但那是几年前,时代已经改变了。从SQL数据动态创建对象

其实我喜欢在回答中概述为以下问题的方法: How to do dynamic object creation and method invocation in .NET 3.5

我不知道是否有可能进一步采取这一步骤,并设置使用存储的数据对象的所有属性。

很显然,我可以设置每个属性的单独IE:
Person p = new Person();
p.Name = "Me";
p.Age = 31;

是否可以做更多的在线东西(抱歉,不太知道这是什么所谓的),如Person p = new Person() { Name = "Me", Age = 31 };其中Name = "Me", Age = 31性质或字符串可能源自数据库?

有什么想法?

+0

从数据库中检索数据并将其存储到集合中后,为什么不简单地遍历此集合并创建对象? – 2012-08-08 10:23:42

+0

这是我在做什么,只是想知道如果有一个聪明的做法,或许会更有活力 – 2012-08-08 10:29:34

+0

嗯,你可以使用Linq ICollection的山坳= dbCollection.Select(X =>新的Person(x.Prop1,X。 Prop2,...); 或类似的东西 – 2012-08-08 10:32:38

回答

1

假设你读取数据库的价值观念,在字典中,如:

Dictionary<string, string> parameters = new Dictionary<string, string>() 
{ 
    {"Name","Scott"}, 
    {"Age","30"} 
}; 

(见字典的类型:字符串,字符串年龄其实INT

您可以动态创建您的对象为

var obj = Activator.CreateInstance(Type.GetType("SO.Form2+Person")); 

foreach (var pi in obj.GetType().GetProperties()) 
{ 
    pi.SetValue(obj, Convert.ChangeType(parameters[pi.Name], pi.PropertyType)); 
} 

-

public class Person 
{ 
    public string Name { set; get; } 
    public int Age { set; get; } 
} 
+0

很多很多谢了,你帮了我很大的忙!对于我在回复中延误的道歉,我正在测试各种想法(包括你的)。 – 2012-08-10 14:02:47

+0

因为我主要是在处理UI控件,所以实际上我最终使用'TypeDescriptor.GetProperties'方法来遍历属性并更新字典中包含的任何东西。 @ L.B你的资产给社区!非常感谢 – 2012-08-10 14:14:54

2

你有没有想过使用LINQ to SQL?它获取SQL数据库的所有表并将它们转换为c#类。您可以通过DataContext对象访问所有数据,每个表都可以成为一个可以通过LINQ调用/编辑/更新的类。

请阅读以下材料。网上有很多例子。

http://msdn.microsoft.com/en-us/library/bb425822.aspx

我希望这有助于。

+0

我可以看到Linq将从我的表中创建类,但不知道它是否会有所帮助,因为不同的对象已经被保存到同一个表中的不同记录中,作为一个非常简单的例子,记录中的值可能是'objectType',它会指示存储的对象的类型在'对象'表中。 – 2012-08-08 10:51:46

+0

@WaynePhipps,这通常不是制作SQL表的好方法,但是如果数据库超出了你的控制范围,你仍然可以使用LINQ中的自动生成类型作为父类,然后定义继承的类从它存储在表中的每种类型。如果您确实拥有对数据库的控制权,那么每个类型都会获得(至少)一个表。 – 2017-09-27 14:47:44