C# linq to sql - 动态选择表

标签 c# linq-to-sql dynamic

我有以下场景:有一个数据库每年都会生成一个新的 logTable。它始于2001年,现在有11张 table 。它们都具有相同的结构,因此具有相同的字段、索引、pk 等。

我有一些称为管理器的类,顾名思义,它们管理此数据库上的每个操作。对于每个不同的表,我都有一个经理,除了这个 logTable,我只有一个经理。

我读了很多书并尝试了不同的方法,例如使用 ITable 动态获取表或我的所有表都实现的接口(interface)。不幸的是,我失去了强类型的属性,因此我无法进行任何搜索或更新或任何事情,因为我无法使用 logTable.Where(q=> q.ID == paramId) .

考虑到这些表具有相同的结构,搜索 2010 年日志的查询可能与搜索 2011 年及以后日志的查询完全相同。

我问这个只是因为我不想为每个表重写相同的代码,因为它们在结构上是相同的。

编辑

我使用 Linq to SQL 作为我的 ORM。而且这些表使用了所有的数据库操作,而不仅仅是选择。

最佳答案

考虑将所有日志放在一个表中并使用 partitioning以保持性能。如果这不可行,您可以创建一个将所有日志表合并在一起的 View ,并在选择日志数据时使用它。这样,当您添加新的日志表时,您只需更新 View 以包含新表。

编辑 进一步到最近的评论:

如果他不允许您创建新的 SP,那么听起来您需要一个新的 DBA。是的,我认为可以定义一个 ILogTable 接口(interface),然后让您的日志表类实现它,但这不允许您这样做 GetTable<ILogTable>() .您必须拥有某种 DAL 类,其中包含创建联合查询的方法,例如

public IEnumerable<ILogTable> GetLogs()
{
    var Log2010 = from log in DBContext.2010Logs
                  select (ILogTable)log;
    var Log2011 = from log in DBContext.2011Logs
                  select (ILogTable)log;
    return Log2010.Concat(Log2011);
}

以上代码完全未经测试,可能会严重失败;-)

编辑让@AS-CII 开心 ;-)

关于C# linq to sql - 动态选择表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7179436/

相关文章:

c# - 如何在 Ektron 中选择属于分类法的图书馆项目

c# - 应使用哪种数据结构从文本文件中读取和存储大约 500 万个条目

c# - 无法从使用自定义运行时在 Docker 中运行 .NET Core 应用程序的 App Engine 连接到 Google Cloud SQL 中的 postgres

c# - 使用 linq-to-sql 批量插入

c# - 如何使用 Linq to SQl 自动重新连接丢失的连接

c# - 扩展 Visual Studio 2012 Express

linq-to-sql - 使用 LINQ2SQL 或 Entity Framework 时,是否为大型数据库创建多个 .dbml/.edmx 文件?

Jquery click 不适用于动态添加的链接

forms - 如何在 Coldfusion CFC 内声明动态表单字段默认值?

javascript - 动态控制组和复选框无样式