簡體   English   中英

如何使用Entity Framework確定數據庫表字段並獲取值

[英]How to determine database table field and get the value with Entity Framework

我正在尋找一種方法來獲取具有可變事物的數據庫表的字段。 我寫了一個愚蠢且無法正常工作的方法來解釋我的需求:

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的列名稱...

您可以使用列名從DataTable調用數據,例如:

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

嘗試這個:

   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

假設我正確閱讀了您的問題,您想獲取一列的值,該列的名稱僅在運行時才知道?

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

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

U可以使用反射通過其字符串名稱獲取Property的值

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;
       }
}

您可以為此使用Entity 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 (其前身,sort of或DbSetDbSet轉換為ObjectQuery ,后者是Entity SQL的基礎。 默認情況下,命令文本使用“ it”作為查詢中表的別名,因此,如果您想要一個特定字段的值,則必須在其前面加上別名作為前綴。

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

與其他方法相比,此方法的優勢在於它查詢數據庫中的請求字段。

當然,如果您事先知道有問題的字段的類型,則可以制作此方法的強類型版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM