我试图通过提供对象类型和表名来创建一个返回ObservableCollection的方法。
该方法应使用此信息来创建ObservableCollection,该ObservableCollection将从表中检索所有行并将其放入具有所需对象类型的先前ObservableCollection中。
public class DatabaseManager
{
public async Task<ObservableCollection<object>> GetObjectsAsync(object object_name, string table_name)
{
Type type = object_name.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(type.GetProperties());
ObservableCollection<object> oc = new ObservableCollection<object>();
using (SqlConnection conn = new SqlConnection(Constants.ConnectionString))
{
await conn.OpenAsync();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from " + table_name;
using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
object x = new object();
foreach (PropertyInfo prop in props)
{
// I want to create a universal object that i can add to my observable collection here.
object propValue = prop.GetValue(object_name, null);
// Code Here
}
oc.Add(x);
}
}
}
}
return oc;
}
}
目标是创建一种从对象类型不特定的数据库表中获取ObservableCollection的方法。
对于任何帮助/建议,我将不胜感激,但我可能对如何执行此操作有错误的想法,但如果有可能,请告诉我。
答案 0 :(得分:1)
C#是一种静态类型的语言,因此通常无法在不知道其类型的情况下构建对象。换句话说,当您这样做
object x = new object();
您实际上得到了System.Object
类型的对象,没有其他属性。
有两种解决方法:
dynamic
和ExpandoObject
-这可以让您即时添加属性,但是生成的对象需要用作dynamic
,或者