gpt4 book ai didi

linq - 根据其列属性值获取属性值

转载 作者:行者123 更新时间:2023-12-01 07:58:41 26 4
gpt4 key购买 nike

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 中属性之一的 Column 属性之一的值相同。所以我必须在 myUserModel 中搜索列 atribute(Name) 并获取相应的属性值并将其分配给“FieldValue”。如果我在 myUserModel 中找不到值,我可以将“FieldValue”设置为“NA”

当我知道属性名称时,获取属性的列属性(名称)值的一种方法如下。
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”。否则将“FieldValue”设置为“NA”。

最佳答案

如果您想获取属性的值并且您只知道其 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! :-)
}

那是你要的吗?

关于linq - 根据其列属性值获取属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com