如何在c#中对动态列表进行排序

2024-03-01

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 对结果进行排序 任何帮助将非常感激。


如果可能的话,我认为如果您的数据是 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();
}

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

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

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

Update:

如果您无法提供数据类型,您可以尝试此 Sort()

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

Usage:

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");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在c#中对动态列表进行排序 的相关文章

随机推荐