Get field from dynamically/programatically named column name with Entity Framework

我们两清 提交于 2019-12-06 07:36:46

问题


I'm looking for a method to change column and field names dynamically/programatically;

as:

string iLoadProfileValue = "ColumnName";

string lastCol = DatabaseFunctions.DatabaseClient
.tbl_MeterLoadProfile
.OrderByDescending(a => a.MeterReadDate)
.FirstOrDefault(a => a.MeterID == meterID).iLoadProfileValue;

I'll change iLoadProfileValue's value programatically. And I would like to get that column's value to lastCol variable.

How can it be done?

Thanks a lot.

Done:

Last situation like this: THANKS to thepirat000 and 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);
}

回答1:


You could use reflection to get a list of properties. Look at the GetProperties() method on System.Type.

http://msdn.microsoft.com/en-us/library/aky14axb(v=vs.110).aspx

public PropertyInfo[] GetProperties()

You could then use LINQ to find a property that maches the one you want:

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

As thepirat000 pointed out in the comments, if you only care about a single property you can call the method GetProperty(string name) instead of GetProperties(). This would probably be more efficient if you only care about one property, and you are not reflecting over all columns in your entity.



来源:https://stackoverflow.com/questions/22377804/get-field-from-dynamically-programatically-named-column-name-with-entity-framewo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!