2014-02-27 72 views
0

我正在尋找一種方法來getdatabase表的字段與變量的東西。 我寫了一個愚蠢和unworking方法來解釋我需要什麼:如何確定數據庫表字段並使用實體框架獲取值

using (var dbContext = new db_ReadyEngine_MSSQL()) 
    { 
    string nameOfField = "UserName"; 

    var table = dbContext.tbl_User; 
    foreach (var x in table) 
     { 
     string fieldValue = x.nameOfField; 
     } 
} 

在這裏,我試圖確定列名其中nameOfField ...

回答

1

您可以通過調用從數據表中的數據使用列的名稱,例如:

Object o = dataTable.Rows[0][nameOfField]; 
0

試試這個:

List<string>values = new List<string>(); 
    using (var dbContext = new db_ReadyEngine_MSSQL()) 
    { 

    values = (from s in dbContext.tbl_User select s.Username).ToList(); 

    } 
    return values 
0

假設我正確地閱讀你的問題,你想獲得一個只有在運行時才知道其名稱的列的值?

如果是這樣,看看下面的代碼。它將從對象類型中提取屬性,搜索與nameOfField值匹配的屬性,然後嘗試從中拉取值。

foreach (var x in table) 
{ 
    var fieldValue = x.GetType().GetProperties().Where(a => a.Name == nameOfField).Select(p => p.GetValue(x, null)).FirstOrDefault(); 
} 
0

U可以使用反射使用其字符串名稱

using (var dbContext = new db_ReadyEngine_MSSQL()) 
    { 
    string nameOfField = "UserName"; 

    var table = dbContext.tbl_User; 
    foreach (var x in table) 
     { 
     string fieldValue = typeof(x).GetProperty(nameOfField).GetValue(x, null) as string; 
     } 
} 
0

您可以使用實體SQL此無需鍵入查詢本身來獲得屬性的值:

IEnumerable<object> GetFieldValues<T>(DbContext context, string fieldName) 
    where T : class 
{ 
    var oc = ((IObjectContextAdapter)context).ObjectContext; 
    ObjectQuery<T> q = oc.CreateObjectSet<T>(); 
    return q.Select("it." + fieldName) 
      .AsEnumerable() 
      .Select(x => x[0]); 
} 

的訣竅是可以很容易地將ObjectSet(前任,排序或DbSet)轉換爲實體SQL的基礎ObjectQuery。默認情況下,命令文本在查詢中使用「it」作爲表的別名,因此如果您想要某個特定字段的值,則必須在別名前面加上前綴,然後就可以了。

Select返回DbDataRecord。返回此記錄的第一個值。

該方法優於其他方法的優點是它只能從查詢數據庫中的請求字段。

當然,如果您事先知道該字段的類型,則可以創建該方法的強類型版本。

相關問題