读书人

来问个怪有关问题。加分了都来看看。

发布时间: 2012-01-03 22:16:06 作者: rapoo

来问个怪问题。。。。。。。。。。。。。。。。。加分了,都来看看。。。。。。。。。.
数据库有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;        }
[解决办法]
探讨
引用:
手写DATACONTEXT类 或者自己写个 静态方法 封装

class xxx{

pubic static xxx get(type){

swicth(type)
{
  case "table1": return datacontext.table1.Take(5);
  case "table2": return datacontext.table2.Take(5);
  ...

}

}

}


这里4个return的类型都是不一样的,xxx不是固定,怎么实现?

读书人网 >.NET

热点推荐