我正在使用WPF从数据库中提取数据,并使用多个不同的表来处理数据,这些表在C#中已建模为POCO。我希望能够创建一种足够灵活的方法来处理传入的任何POCO,然后将可观察到的同一类的集合返回给调用方。
我已经设置了一些尚未测试的东西,但是我知道这可能不是实现此目标的最佳方法,因此我想在进行故障排除或尝试之前就如何最好地获得一些建议。使它起作用:
public static ObservableCollection<object> SQLAuthentication(ObservableCollection<object> myCollection, object myClass, String sql)
{
var conn = new SqlConnection();
var paramList = GenerateSQLParameters(myClass, null);
var tempModel = Global.GenerateNewInstance(myClass);
//get the type
Type model = tempModel.GetType();
var prop = model.GetProperties();
PropertyInfo pi;
using (getConnection(conn))
{
conn.Open();
SqlCommand cmd;
SqlDataReader reader;
cmd = new SqlCommand(sql, conn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
//set the values for each property in the model
foreach (var p in prop)
{
pi = tempModel.GetType().GetProperty(p.Name);
pi.SetValue(tempModel, reader[p.Name]);
}
myCollection.Add(tempModel);
}
reader.Close();
cmd.Dispose();
}
return myCollection;
}
答案 0 :(得分:1)
您可以在方法自身的签名中使用泛型类型,您无需使用对象集合...而在撰写此约翰B消息时,我就大吃一惊
public static ObservableCollection<T> SQLAuthentication(ObservableCollection<T> myCollection, T myClass, String sql) where T: class
@John,如果您将其发布为答案不当,请删除它,因为您首先在技术上大喊了它,如果这样做,请在评论中留言