如何基于另一个包含属性名称的列表从列表中获取特定属性

时间:2019-04-25 05:49:58

标签: c# .net c#-4.0

这可能是基本概念,但我无法实现。

public class ClassA
{

    public String firstName { get; set; }
    public String lastName { get; set; }
    public int employeeID{ get; set; }
    public decimal salary { get; set; }
}

data in List A = List<ClassA> :

 firstName | lastName |employeeID | salary
 John      | Smith    | 123       |$400
 Emila     | Johnson  | 124       |$500

我想基于列表B中的数据从列表A中选择一些属性。

public class ClassB
{

    public String column{ get; set; }
    public String coulmnName{ get; set; }
}

data in List B  = List<ClassB> 

     column   | coulmnName
    firstName | First Name
    lastName  | Last Name

因此,最后通过使用列表A和列表B(我需要列表B中存在的属性,并且需要将属性名称更改为列表B的columnName。)

Final data:

 First Name | Last Name 
 John       | Smith
 Emila      | Johnson

1 个答案:

答案 0 :(得分:0)

尝试使用linq会很棘手,因为您不知道在编译时要选择的所有属性。

一种解决方法是捕获二维数组中的所有属性:

base64

实际的代码是:

public class Item
{
    public String firstName { get; set; }
    public String lastName { get; set; }
    public int employeeID { get; set; }
    public decimal salary { get; set; }
}

public class Filter
{
    public String PropertyName { get; set; }
    public String PropertyValue { get; set; }
}

private string GetPropertyValue(Item item, string propertyName)
{
    return item.GetType().GetProperty(propertyName).GetValue(item, null).ToString();
}

您也可以存储有关各个属性的类型信息,但是对匿名类型执行任何在编译时没有结构的操作将非常棘手。