来问个怪问题。。。。。。。。。。。。。。。。。加分了,都来看看。。。。。。。。。.
数据库有4张表,其中大家都有的字段有20个,然后只有几个字段是每表特有的
别骂表设计太烂,哈哈,现不考虑改表结构。
4表都拉到DataContext里,现在url参数接收到的表名是string的,
每次查询、修改都要switch + 4个case,
怎么办??
代码比如:
swicth(type)
{
case "table1": grid.DataSource = datacontext.table1.Take(5); break;
case "table2": grid.DataSource = datacontext.table2.Take(5); break;
case "table3": grid.DataSource = datacontext.table3.Take(5); break;
case "table4": grid.DataSource = datacontext.table4.Take(5); break;
}
------解决方案--------------------
var metaTable = db.Mapping.GetTables().Where(o => o.TableName == "Customers").SingleOrDefault();
Debug.Assert(metaTable != null);
var table = db.GetTable(metaTable.RowType.Type);
顺便打个广告,ALinq -- 支持多种数据库的Linq to DB,绝对好用,官网:http://www.alinq.org
------解决方案--------------------你可以加个类型转换的吧。例如(Table<Customer>)table
------解决方案--------------------
手写DATACONTEXT类 或者自己写个 静态方法 封装
class xxx{
pubic static xxx get(type){
swicth(type)
{
case "table1": return datacontext.table1.Take(5);
case "table2": return datacontext.table2.Take(5);
...
}
}
}
------解决方案--------------------up
------解决方案--------------------
C# code
private IEnumerable GetDataSource(string tableName)
{
DataClasses1DataContext db = new DataClasses1DataContext();
var metaTable = db.Mapping.GetTables().Where(o => o.TableName == tableName).SingleOrDefault();
var table = db.GetTable(metaTable.RowType.Type);
IEnumerable query = db.ExecuteQuery(table.ElementType, "select top 5 * from " + tableName);
return query;
}
------解决方案--------------------