我有一个从DataTable派生的类。在它的ctor中,我希望它拥有从调用函数获得的DataTable对象中的所有数据。
这听起来像一件非常琐碎的事情,但我很惊讶,我无法弄清楚。对不起,我已经连续编码超过12个小时了,所以我想我已经被淘汰了。
我们会感谢你的帮助。
using System.Data;
using Foo.Data;
namespace Foo.BusinessObjects
{
public class StringTable : DataTable
{
public StringTable() : base()
{
var sql = "SELECT * FROM FooBar";
// I know that that's not a legal C# statement but
// if it were, I'd want to do the equivalent of the following:
this = Database.DefaultDatabase.GetDataTable(sql);
}
}
}其中,GetDataTable方法返回一个System.Data.DataTable对象。签名在这里:
public DataTable GetDataTable(string sql, params SqlParameter[] parameters)
{
DataSet dataset;
return ((dataset = GetDataSetInternal(sql, false, parameters)) == null ?
null : dataset.Tables[0]);
}发布于 2013-09-13 09:25:37
可以在派生类的构造函数中替换下面一行。
this = Database.DefaultDatabase.GetDataTable(sql);使用
DataTable dtResult = Database.DefaultDatabase.GetDataTable(sql);
this.Merge(dtResult);发布于 2013-09-12 21:28:06
不能在构造函数中执行此类操作。您可以支持组合而不是继承,并且仍然拥有您的StringTable类。
public class StringTable
{
private DataTable dataTable;
public StringTable()
{
var sql = "SELECT * FROM FooBar";
// I know that that's not a legal C# statement but
// if it were, I'd want to do the equivalent of the following:
dataTable = Database.DefaultDatabase.GetDataTable(sql);
}
}另一种选择是寻找使用DataTable的工厂模式,而不是对其进行子类化。沿着这些路线的东西。继承实际上只会给您带来好处,如果它可以表现出多态的方式。否则我不确定你会得到什么,
public class DataTableFactory
{
public DataTable CreateStringTable()
{
var sql = "SELECT * FROM FooBar";
DataTable dataTable = new DataTable();
return Database.DefaultDatabase.GetDataTable(sql);
}
public DataTable CreateSomeOtherTable()
{
//etc etc
}
}https://stackoverflow.com/questions/18773449
复制相似问题