我正在寻找一种动态/编程方式更改列名和字段名的方法;
为:
string iLoadProfileValue = "ColumnName";
string lastCol = DatabaseFunctions.DatabaseClient
.tbl_MeterLoadProfile
.OrderByDescending(a => a.MeterReadDate)
.FirstOrDefault(a => a.MeterID == meterID).iLoadProfileValue;
我将以编程方式更改 iLoadProfileValue 的值。 我希望将该列的值设为 lastCol 变量。
怎么做?
非常感谢。
完成:
这样的最后情况: 感谢 thepirat000 和 Dismissile
string iLoadProfileValue = "MeterReadDate";
var myEntity = DatabaseFunctions.DatabaseClient.tbl_MeterLoadProfile.OrderByDescending(a => a.MeterReadDate).FirstOrDefault(a => a.MeterID == 6);
if (myEntity != null)
{
var properties = myEntity.GetType().GetProperty(iLoadProfileValue);
object value = properties.GetValue(myEntity);
}
答案 0 :(得分:6)
您可以使用反射来获取属性列表。查看System.Type上的GetProperties()方法。
http://msdn.microsoft.com/en-us/library/aky14axb(v=vs.110).aspx
public PropertyInfo[] GetProperties()
然后,您可以使用LINQ查找匹配所需属性的属性:
var myEntity = DatabaseFunctions.DatabaseClient
.tbl_MeterLoadProfile
.OrderByDescending(a => a.MeterReadDate)
.FirstOrDefault(a => a.MeterID == meterID);
if(myEntity != null) {
var properties = myEntity.GetType().GetProperties();
// iterate through the list of public properties or query to find the one you want
// for this example I will just get the first property, and use it to get the value:
var firstProperty = properties.FirstOrDefault();
// get the value, it will be an object so you might need to cast it
object value = firstProperty.GetValue(myEntity);
}
正如thepirat000在评论中指出的那样,如果您只关心单个属性,则可以调用方法GetProperty(string name)
而不是GetProperties()
。如果您只关心一个属性,并且您没有反映实体中的所有列,那么这可能会更有效。