2012-01-25 6 views
3
List<MyModel1> myModel1 = new List<MyModel1>();      
MyUserModel myUserModel = new MyUserModel();      
List<MyModel2> myModel2 = new List<MyModel1>(); 
myModel1 = m_Service1.GetMyModelFields(); 
myUserModel = m_Service2.GetMyUserDetails(); 
myModel2 = (from myModel1Field in myModel1       
      select new MyModel2 { FieldCaption = myModel1Field.FieldAlias, 
      FieldValue = "" }).ToList<MyModel2>(); 

myModel1Field.FieldAlias ​​текст будет таким же, как значение одного атрибута столбца одного объекта недвижимости в myUserModel. Поэтому мне нужно найти атрибут столбца (Name) в myUserModel и получить соответствующие значения свойств и назначить его «FieldValue». Если я не могу найти значение в myUserModel, я могу установить «FieldValue» как «NA»Получение значения свойства на основе его значения атрибута столбца

Один из способов получить значение атрибута column (Name) для свойства следующим образом, когда я знаю имя свойства.

myUserModel.GetType().GetProperty("FirstName").GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute), false).Cast<System.Data.Linq.Mapping.ColumnAttribute>().Single().Name 

Но в моем случае Имущество не будет известно. Мне нужно найти свойство, основанное на значении myModel1Field.FieldAlias. Как это сделать. Пожалуйста, предложите.

MyUserModel с одним из его свойств

public class MyUserModel { 
[Column(Name = "first_name", DbType = "varchar")] 
public string FirstName { get; set; } 
} 

Теперь, если myModel1Field.FieldAlias ​​является 'first_name', то я должен искать в MyUserModel для свойства с атрибутом Column (имя), как first_name. Если он существует, я должен установить его значение в значение «FieldValue». Else установить «FieldValue» как «NA».

ответ

2

Если вы хотите, чтобы получить значение свойства и вы знаете только имя свойства одного из ColumnAttribute атрибутов на нем, что вы можете сделать это:

// Let's say you have the user model like so: 
MyUserModel myUserModel = new MyUserModel { FirstName = "A", LastName = "B"}; 

// And then you want the value of the property that has the Column attribute Name "first_name" 
string searchName = "first_name";  

// Using some lambda you can do this (I do not know how to do this in LINQ syntax, sorry) 
object propertyValue = typeof (MyUserModel).GetProperties() 
      .Where(p => 
         { 
          var attrib = (ColumnAttribute)p 
           .GetCustomAttributes(typeof (ColumnAttribute), false) 
           .SingleOrDefault(); 
          return (attrib != null && 
            attrib.Name.Equals(searchName)); 
         }) 
      .Select(p => p.GetValue(myUserModel, null)) 
      .FirstOrDefault(); 

if(propertyValue != null) 
{ 
    // Do whatever you want with the string "A" here - I suggest casting it to string! :-) 
} 

Это то, что вы хотите?

Смежные вопросы