2015-04-01 64 views
1

我们模型访问表我会使用类似下面的代码:访问IDbSet使用字符串

var item = _entities.Table.Where(x => x.Id = id).FirstOrDefault();

_entities是我们的模型背景和表将在模型中的表名。

如何使用字符串来表示模型中表格的名称? 如:

string tableName = "Table"; 
var item = _entities.tableName.Where(x => x.Id = id).FirstOrDefault(); 
+0

您可以使用反射来查找具有该名称的属性,但是会失去所有编译时类型的安全性(您将无法执行'Where(x => x.Id = id)')。你想达到什么目的? – 2015-04-01 19:01:17

+0

我们正在尝试根据用户输入更新表格。用户将提供一个电子表格,我们将更新相关的sql表格。 – navig8tr 2015-04-01 19:44:02

回答

0

要获取名称的属性,你做的东西沿着这些路线:

object table = _entities.GetType().GetProperty("Table").GetValue(_entities, null); 

这可以让你的表格为object,您可以强制转换为IDbSet或任何其他界面你有:

var table = _entities.GetType().GetProperty("Table").GetValue(_entities, null) as IDbSet; 

请注意,你这样做时不会有类型安全的优势。您可以使用动态关键字,但是您可以直接从窗口中输入安全类型。

这可能是可取的,如果有点脆弱,做这样的事情:

if (tableName == "Table") 
{ 
    _entities.Table... 
} 
else if (tableName == "OtherTable") 
{ 
    _entities.OtherTable.... 
} 

至少做这种方式,你有编译器看你的背部。