问题描述
我继承了一个设计糟糕的数据库,不得不将旧代码转换为 MVC & EF。 我希望能够从 SWITCH...CASE 中动态地将数据库表名分配给变量。 桌子设计完全一样,但不同的业务领域有不同的桌子! 我该怎么做呢?我可能错过了一些非常基本的东西! 我目前拥有的代码如下所示。
声明数据库
private CDBEntries db = new CDBEntries();
ActionResult 下面
var cmembs = db.XXXcmembs;
switch (returnValue.toupper())
{
case "CRI":
cmembs = db.YYYsmembs;
break;
default:
break;
}
cSearchQuery = (from CCM in cmembs
join CC in cDB on CCM.name equals CC.cname into CGroup
from CC in CGroup.DefaultIfEmpty()
select new CSearch()
{
id = CCM.id,Name = CCM.name,Status = CCM.status,cid = CC.id
});
实时代码中有更多连接,但为了简单起见,我将代码简化为基本代码。
解决方法
不要认为您可以像那样使用 var。 Var 是强类型并在编译类型中声明。
隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器会确定类型
您也许可以使用 dynamic,这是在运行时推断的。
Walkthrough: Creating and Using Dynamic Objects
动态对象在运行时而不是在编译时公开属性和方法等成员。
如果您遇到困难,请告诉我,我会在今天晚些时候从我这边看看是否可行。
,经过进一步研究,我意识到我想做的事与使用 EF 的原因(即编译时验证)背道而驰。 由于所有表格都具有相同的布局,我将把它们“合并”到 1 个表格中,并用一个额外的列来指定区域。