我面临一个问题,我无法弄清楚如何管理。关于继承和铸
我开发了一个在DataTable上实现非唯一索引的类;处理商品,我想发展我IndexedTable
的是,obviousvly,从DataTable
继承,添加一个方法使用非唯一索引
我写信给执行表上的搜索:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace DWH_Core
{
class IndexedTable : DataTable
{
//private DataTable m_tbl;
//public Dictionary<Int32, Int32> idx;
private Index_NonUnique m_idx = null;
public void buildNonUniqueIndex(string keyField)
{
m_idx = new Index_NonUnique();
m_idx.buildIndex(this, keyField);
return;
}
public DataRow[] search (string key)
{
return m_idx.search(key);
}
public DataRow[] search(int key)
{
return m_idx.search(key);
}
public DataRow[] search(short key)
{
return m_idx.search(key);
}
}
}
和相关类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace DWH_Core
{
class Index_NonUnique
{
private string m_KeyField;
private ILookup<object, DataRow> m_IdxByKey;
public void buildIndex(DataTable tbl, string keyField)
{
m_KeyField = keyField;
IEnumerable<DataRow> enumerable = tbl.AsEnumerable();
m_IdxByKey = enumerable.ToLookup(o => o[keyField]);
}
public DataRow[] search(string keyValue)
{
return m_IdxByKey[keyValue].ToArray();
}
public DataRow[] search(int keyValue)
{
return m_IdxByKey[keyValue].ToArray();
}
public DataRow[] search(short keyValue)
{
return m_IdxByKey[keyValue].ToArray();
}
}
}
的问题是,当我产生,在通常的方式一个DataTable类,并尝试将其转换为IndexedTable,我得到了运行时错误“无法从类型的对象执行投“SYSTE类型'DWH_Core.IndexedTable'中的“m.Data.DataTable”。 我不想使用private DataTable m_tbl
成员,因为我想将所有DataTable成员应用到我的IndexedTable对象,但我无法理解如何管理此错误。 最后,我的目标是编写这样的事:
IndexedTable tmpTable = null;
SqlCommand cmd = "SELECT * FROM SOME_TABLE"
SqlDataReader rdr = cmd.ExecuteReader();
m_SAP_Allocazione = (IndexedTable)rdr.ToTable();
m_SAP_Allocazione.buildNonUniqueIndex("PERNR");
谢谢@aleha,我恢复的内部公共件上。 –