【问题标题】:How do I sort the dynamic list in c#如何在c#中对动态列表进行排序
【发布时间】:2015-02-25 08:18:38
【问题描述】:
function void sortDynamicData(typeOfClass,SortKey)
{
List<dynamic> results = null; //results might be of any type it may contain students data or books data or professors data, hence I took as dynamic
results = services.GetMyresults(typeOfClass); //returns list of dynamic objects

results = results.OrderBy(SortKey).ToList();
 ...
 ...
 ...

}

我的问题是我想根据 sortKey 对结果进行排序 任何帮助都将不胜感激。

【问题讨论】:

  • 如果不知道list.OrderBy(o=&gt;o.Key).ToList() 中的正确键,则无法进行排序。最好在方法services.GetMyresults(typeOfClass) 中排序并发送。
  • 你知道排序依据的列名吗?

标签: c# list sorting dynamic


【解决方案1】:

如果可能的话,我认为如果您的数据是 T 列表而不是动态列表,则使用起来会更好、更容易

如果您无法将输入数据更改为列表:

public List<dynamic> Sort<T>(List<dynamic> input, string property)
{
    var type = typeof(T);   
    var sortProperty = type.GetProperty(property);
    return input.OrderBy(p => sortProperty.GetValue(p, null)).ToList();
}

用法:您需要提供列表中的数据类型,例如按名称属性排序列表,其中dynamic是Person类型的

var result = Sort<Person>(people, "Name");

=================

更新:

如果你不能提供数据的类型,你可以试试这个Sort()

public List<dynamic> Sort(List<dynamic> input, string property)
{   
    return input.OrderBy(p => p.GetType()
                               .GetProperty(property)
                               .GetValue(p, null)).ToList();
}

用法:

var people = new List<dynamic>
{
    new Person { Name = "Person 5" },
    new Person { Name = "Person 2" },
    new Person { Name = "Person 9" },
    new Person { Name = "Person 1" }
};  

var result = Sort(people, "Name");

【讨论】:

  • 不错。给这个加星标:D
  • 但是我有 100 种类型,我提供给用户创建自己的类,我需要对数据样本数据进行排序 List results = new List() ; for(int i=0;i
  • 我更新了方法,不需要数据类型了,请看看是不是你需要的
  • >_Func<dynamic, object> 进行排序。我个人喜欢使用 Linq 表达式来做到这一点。
  • 是的,我同意它可能会对大型列表产生潜在的性能影响。但如果列表只有评论中的 15 项,我认为用户几乎不会意识到任何性能影响。您还可以发布有关使用 Func 的解决方案吗?
【解决方案2】:
var final = results.AsEnumerable().OrderBy(x => x[0])

【讨论】:

  • 但问题是我没有任何预定义的列表结构,即动态类型,
  • 是的,这就是我添加第二种语法的原因,您只需要一种方法来确定动态列表的索引列。这意味着您不必这样做。 typeOfClass,SortKey --> 调用客户端必须已经定义了这个
  • 对于动态列表我不应该使用 lambda 表达式,我尝试了这个但不工作 results = results.AsQueryable().OrderBy(SortKey).ToList();
  • 你能把它贴出来让我们看看你在做什么吗?
  • list = list.AsEnumerable().OrderByDescending(x =&gt; x.SomeDynamicProperty).ToList&lt;dynamic&gt;();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多