2

クラスのリストと文字列のリストがあります。文字列のリストには、クラスのフィールドに一致するフィールド名が含まれています。2 つのリスト間で共通する個別のフィールドを特定できる Linq クエリはありますか? 以下の例を参照してください。

public class ClassA
{
    public string Field1{get; set;}
    public decimal Field2{get; set;}
    public int Field3{get; set;}

    public ClassA(string field1, decimal field2, int field3)
    {
        Field1 = field1;
        Field2 = field2;
        Field3 = field3;
    }
}

public void Main()
{
    List<ClassA> lstClass = new List<ClassA>();
    lstClass.Add(new ClassA("value1", 1.23, 1));
    lstClass.Add(new ClassA("value2", 0.32, 3));
    lstClass.Add(new ClassA("value3", 2.34, 9));

    List<string> lstNames = "Field1,Field2".ToString().Split(',').ToList();

    // How to find intersection using linq of lstClass and lstNames (should be list  containing Field1 and Field2).
}

フォローアップの 2 番目の質問は、lstClass からフィールドのリストを取得する方法です ("Field1"、"Field2"、および "Field3" を含む文字列のリストである必要があります)。

ありがとう、

リー

4

2 に答える 2

3

反射を使用:

    typeof(ClassA).GetProperties(
       BindingFlags.Public | BindingFlags.Instance)
    .ToList() // Returns all the public instance properties of ClassA

だからあなたの解決策:

var lstFieldNames = typeof(ClassA).GetProperties(
       BindingFlags.Public | BindingFlags.Instance)
       .Select(p=>p.Name).ToList()

var intersect = lstFieldName.Intersect(lstNames);
于 2013-09-17T17:56:44.047 に答える
0

交点の値を取得するには:

var lstFieldNames = typeof(ClassA).GetProperties(
       BindingFlags.Public | BindingFlags.Instance)
       .Select(p=>p.Name).ToList()

var intersect = lstFieldName.Intersect(lstNames);
var type = typeof(ClassA);
var myObject = new ClassA(); // or any other object you want its properties values
var values = intersect.Select(p => new {
           Name = p,
           Value = type
                  .GetProperty(p, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public)
                  .GetValue(myObject, null)
           });
于 2013-09-17T18:34:54.423 に答える