以下代码按对象中存在的任何属性名称(作为字符串)对任何对象数组进行排序 .
使用排序方向“asc”或“desc”也完成排序数组 .
这是我想要应用的目标 .
using System.Linq.Dynamic;
/// <summary>
/// This method sorts any array of objects.
/// </summary>
/// <param name="dataSource">Array of objects</param>
/// <param name="propertyName">property name to sort with</param>
/// <param name="sortDirection">"ASC" or "DESC"</param>
/// <returns></returns>
private object[] SortArrayOfObjects(object[] dataSource, string propertyName, string sortDirection)
{
string sortExpression = string.Format("{0} {1}", propertyName, sortDirection);
// sortExpression will be something like "FirstName DESC".
// OrderBy method takes expression as string like "FirstName DESC".
// OrderBy method exists in "System.Linq.Dynamic" dll.
// Download it from www.nuget.org/packages/System.Linq.Dynamic/
object[] arrSortedObjects = dataSource.OrderBy(sortExpression).ToArray();
return arrSortedObjects;
}
1 回答
您可以通过使方法通用以从调用方法接受类型,然后使用类型参数T将dataSource转换为,来执行您想要的操作 .
这是一个完整的演示:
把它放在DLL输出的项目中:使用System;使用System.Collections.Generic;使用System.Text;使用System.Collections.Generic;使用System.Linq;使用System.Linq.Dynamic;
将它放在一个控制台应用程序项目中,并确保引用包含上述代码的库:using System;使用System.Collections.Generic;使用System.Text;使用GenericMethod;使用System.Linq;
你完成了 .
确保在DLL中引用System.Linq.Dynamic .