如何使用选定字段将 IEnumerable 转换为匿名类型
How to cast IEnumerable to anonymous type with selected fields
所以,我有一些字符串数组:
第 1 列
Column3
我有 class 字段
class A
{
object Column1;
object Column2;
object Column3;
object Column4;
object Column5;
}
现在我有一个 A 对象列表
List<A> ListOfA = new List<A>();
该列表有 N 个元素。
现在,如何将它转换为该数组中的某个对象?并且有 List<NewAnonymous>
我想要 new { Column1 = '', Column3=''}
的列表,但我不知道该数组中会有哪些列。
这可能吗?如果是的话,我在哪里可以找到它。我当然有一些代码,但我认为它无济于事,所以我只是试图解释我想说的话
根据对问题的评论,我建议:
foreach (A a in listOfA)
{
var t = typeof(A);
List<object> list = new List<object>();
foreach (var prop in t.GetProperties())
{
list.Add(prop.GetValue(a));
}
newListOfA.Add(list);
}
编辑:
如果您更喜欢基于非查询的 LINQ,这里是 EarthEngine 的 LINQ
的扩展
t = typeof(A)
listOfA.SelectMany(o=>t.GetProperties().Select(i=>i.GetValue(o))
与 Murdock 的答案相同,但使用的是纯 LINQ
from a in listOfA
let t = typeof(A)
from prop in t.GetProperties()
select prop.GetValue(a)
我要逆势而行,说你可以通过反思来做到这一点,但你不应该这样做。
为什么?因为现在你有一个匿名类型,你没有 "know" 的属性。你将如何在下游使用它?更多反思?
如果您有未知数量的字段,最好以索引方式(列表或字典)处理它们,而不是反射的沉坑。
所以,我有一些字符串数组:
第 1 列 Column3
我有 class 字段
class A
{
object Column1;
object Column2;
object Column3;
object Column4;
object Column5;
}
现在我有一个 A 对象列表
List<A> ListOfA = new List<A>();
该列表有 N 个元素。
现在,如何将它转换为该数组中的某个对象?并且有 List<NewAnonymous>
我想要 new { Column1 = '', Column3=''}
的列表,但我不知道该数组中会有哪些列。
这可能吗?如果是的话,我在哪里可以找到它。我当然有一些代码,但我认为它无济于事,所以我只是试图解释我想说的话
根据对问题的评论,我建议:
foreach (A a in listOfA)
{
var t = typeof(A);
List<object> list = new List<object>();
foreach (var prop in t.GetProperties())
{
list.Add(prop.GetValue(a));
}
newListOfA.Add(list);
}
编辑: 如果您更喜欢基于非查询的 LINQ,这里是 EarthEngine 的 LINQ
的扩展t = typeof(A)
listOfA.SelectMany(o=>t.GetProperties().Select(i=>i.GetValue(o))
与 Murdock 的答案相同,但使用的是纯 LINQ
from a in listOfA
let t = typeof(A)
from prop in t.GetProperties()
select prop.GetValue(a)
我要逆势而行,说你可以通过反思来做到这一点,但你不应该这样做。
为什么?因为现在你有一个匿名类型,你没有 "know" 的属性。你将如何在下游使用它?更多反思?
如果您有未知数量的字段,最好以索引方式(列表或字典)处理它们,而不是反射的沉坑。