私がそれを正しく理解していれば、そのリスト内のインスタンスではなく、タイプ自体を比較する必要があります。
あなたはこのようにすることができます:
List<string> metadata = new List<string>();//string list
metadata.Add("itemname");
metadata.Add("soid");
metadata.Add("qty");
metadata.Add("yada");
var result = from str in metadata
join prop in typeof(Input).GetProperties() on str equals prop.Name
select str;
foreach (string prop in result)
{
Console.WriteLine(prop);
}
不明なオブジェクトのリストがあり、T
それぞれをメタデータと照合したい場合は、教えてください。お手伝いします.
あなたのコメントに基づいて編集:when we get the common name between list<input> and string how will get the value of corresponding member of the class.now you return only common names r8..?
このようにできます。次の 2 つのクラスがあるとします。
public class Input
{
public string soid { get; set; }
public string itemname { get; set; }
public int qty { get; set; }
}
public class Yada : Input
{
public string yada { get; set; }
}
4 つのプロパティInput
のうち 3 つがあり、Yada
クラスには 4 つすべてがあります。
次に、オブジェクトのリストがあるとします。
List<Input> inputclass = new List<Input>();//inputclass list
inputclass.Add(new Input() { itemname = "test",soid="myId",qty=10 });
inputclass.Add(new Yada() { itemname = "test2",soid="myId2", yada = "woo",qty=20 });
次のコードを使用すると、現在の値を含め、オブジェクトから一致するすべてのプロパティを取得できます。
var result = inputclass.Select(
input => (from str in metadata
join prop in input.GetType().GetProperties()
on str equals prop.Name
select new { Obj = input, Prop = str, Value = prop.GetValue(input, null) }))
.SelectMany(i => i)
.GroupBy(obj => obj.Obj);
foreach (var obj in result)
{
Console.WriteLine(obj.Key);
foreach (var prop in obj)
{
Console.WriteLine(prop.Prop + ":" + prop.Value);
}
Console.WriteLine();
}
Console.ReadKey();
ここに私の入力があります:

注意点として、を使用するときは注意してくださいGetValue
。たとえば、インデクサーで動作させるには、わずかな変更を加える必要があります。