2015-04-01 67 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.... 
} 

至少做這種方式,你有編譯器看你的背部。