【发布时间】:2018-10-17 05:42:44
【问题描述】:
我有下面的动态数组
dynamic[] queueList = await queueInfo.Run.GetData<dynamic[]>(Name);
我想获取 ImportTableName 字段中存在的唯一值。所以,经过一番搜索,我发现了这个,
var distNames = queueList.Select(o => new {o.ImportTableName }).Distinct();
按预期工作。
但我不想硬编码字段名“ImportTableName”。所以尝试做这样的事情
dynamic[] queueList = await queueInfo.Run.GetData<dynamic[]>(Name);
string tableName = "ImportTableName"
var distNames = queueList.Select(o => new {o.tableName }).Distinct();
但它不起作用,结果只是 NULL。有人可以帮我实现这一目标吗?
【问题讨论】:
-
您尝试的第二种方式是硬编码的,而不是第一种有效的方式。第一种方法是该类的属性,第二种方法是硬编码字符串。
-
@TechYogesh - 我想我没有正确解释它,它并不总是“ImportTableName”,它可以是任何东西。
-
动态选择 stackoverflow.com/questions/16516971/linq-dynamic-select 而不是之后的
Distinct。 -
为了回答这个问题,我们需要知道动态对象是如何在GetData方法内部生成的。使用反射适用于分配给动态引用的常规 .Net 对象,但不适用于例如扩展对象。见stackoverflow.com/questions/4939508/…
-
queueList.Select(o => o.GetType()) 的结果是什么?