Получение значения свойства на основании значения атрибута его столбца - PullRequest
3 голосов
/ 25 января 2012
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 ​​будет таким же, как значение одного из атрибутов Column одного из свойств в myUserModel.Поэтому я должен искать атрибут столбца (Name) в myUserModel, получить соответствующие значения свойств и назначить его для FieldValue.Если я не могу найти значение в myUserModel, я могу установить «FieldValue» как «NA»

Один из способов получить значение атрибута столбца (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 (Имя) как имяЕсли он существует, я должен установить его значение 'FieldValue'.В противном случае установите «FieldValue» как «NA».

1 Ответ

2 голосов
/ 25 января 2012

Если вы хотите получить значение свойства и вам известно только свойство Name одного из атрибутов 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! :-)
}

Это то, что вам нужно?

...