1

假设我有以下代码:

dynamic myData = GetMyData();
foreach(dynamic d in myData.data)
{
   Console.WriteLine(d.name);
}

我怎么能按字母顺序写出所有的名字?如果我使用类似List<MyClass>我会使用的东西myData.OrderBy(t => t.name),但是当我使用动态类型时这似乎不起作用。

关于如何订购这些值的任何建议?

4

2 回答 2

7
Enumerable.OrderBy(myData, (Func<dynamic, dynamic>)(t => t.name));

myData.OrderBy(t => t.name)这应该与通常返回的结果相同。

由于OrderBy是一种扩展方法,因此它不适用于动态类型。看到这个答案

于 2012-06-01T21:52:38.073 回答
3

这可能对您有用:

IEnumerable<dynamic> sequence = Enumerable.Cast<dynamic>(myData);
foreach (var result in sequence.OrderBy(x => x.name))
{
    Console.WriteLine(result.name);
}

基本上在调用Cast<dynamic>和转换为IEnumerable<dynamic>之后,您可以将您喜欢的作为一个序列而不是单个值。

并不是说我实际上已经尝试过上述方法,但我相信它应该可以工作。

于 2012-06-01T21:51:03.987 回答