【发布时间】:2013-08-08 14:08:55
【问题描述】:
我需要构建大约 30 个不同的管理页面来从 30 个不同的表中添加/编辑/删除记录。我显然可以花时间创建 30 个唯一页面来查询每个表,但我很好奇是否有一种方法可以简单地创建一个查询单个动态 linq 查询的单个动态页面。然后,此 linq 查询返回指定表中的所有字段和记录。
我已经看到与这个 (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) 类似的动态 linq 示例,但这仍然需要将表名硬编码到查询中。我想做一个与此类似的全选,我传入表的名称(即“产品”、“订单”等),然后以某种方式查询该表:
private List<tableName> MyDynamicQuery(string tableName)
{
IEnumerable<tableName> dynamicList;
using (MyEntities db = _conn.GetContext())
{
dynamicList = (from q in db.<tableName>
select q).ToList();
}
return dynamicList;
}
这样的事情有可能吗?
谢谢
【问题讨论】:
-
您听说过动态数据框架,它可能对您有所帮助。
-
LINQ 不适合这种情况。考虑使用原始
DataReaders、微 ORM 或DataTable。 -
@SLaks 是对的。我也遇到过类似的情况,我即时构建 SQL 并使用 micro-orm(准确地说是 ServiceStack.OrmLite)来返回数据。
-
如果您只有表名作为字符串,则没有真正的方法可以获得强类型的返回值。由于您在编译时不知道类型,即使您可以实现这样的方法,也永远无法调用它,除非您在编译时知道它的返回类型是什么。要么它需要返回一个非静态类型的结果(即 DataTable),要么你需要使用泛型以便调用者在编译时知道返回类型。
-
因为标准不是动态的,我认为您应该通过在架构的 (.GetTableNames() 或其他东西中查找表名来进行。返回 List
怎么样?你不是说List 还是什么?