2012-01-25 10 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のプロパティの1つのColumn属性の値と同じになります。だから、myUserModelの列atribute(Name)を検索し、対応するプロパティ値を取得し、それを 'FieldValue'に代入する必要があります。 myUserModelで値を見つけることができない場合は、「FieldValue」を「NA」として設定できます列の属性値に基づいてプロパティ値を取得する

プロパティの列属性(Name)値を取得する1つの方法は、プロパティ名を知っているときは以下のとおりです。

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

しかし、私の場合、プロパティ名はわかりません。 myModel1Field.FieldAlias値に基づいてプロパティを検索する必要があります。これについてどうやって行くの?提案してください。 myModel1Field.FieldAliasは「first_nameの」の場合、それの一つと

MyUserModelは性質

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

は今、私はfirst_nameのように列の属性(名前)とプロパティのMyUserModelで検索する必要があります。それが存在する場合、私はそれを 'FieldValue'の値に設定する必要があります。それ以外の場合、「FieldValue」を「NA」と設定します。

答えて

2

あなたがプロパティの値を取得したいとあなただけ知っている場合ColumnAttributeの一つのNameプロパティは、あなたが何ができるか、それの属性はこれです:

// 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! :-) 
} 

は何をしたいということですか?

関連する問題