[英]How to determine the next primary key from a database table for a generic entity using Entity Framework Core?
[英]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或DbSet
) DbSet
轉換為ObjectQuery
,后者是Entity SQL的基礎。 默認情況下,命令文本使用“ it”作為查詢中表的別名,因此,如果您想要一個特定字段的值,則必須在其前面加上別名作為前綴。
Select
返回一個DbDataRecord
。 返回該記錄的第一個值。
與其他方法相比,此方法的優勢在於它僅查詢數據庫中的請求字段。
當然,如果您事先知道有問題的字段的類型,則可以制作此方法的強類型版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.