【发布时间】:2015-10-27 13:24:38
【问题描述】:
以下代码,按对象中存在的任何属性名称(作为字符串)对任何对象数组进行排序。
排序数组也是使用排序方向“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;
}
【问题讨论】:
-
在那之后您将无法使用 LINQ - 而且这样做没有任何意义,因为您实际上已经丢失了类型信息(您无法编写,例如:@ 987654323@ 因为 1. 您不再知道
newArrEmpInfo是否是 IEnumerable,以及 2. 您不知道集合中的任何对象都有Id属性 - 或者它甚至是int) .您能否提供有关您要完成的工作的更多信息? (你的目标;不是实施) -
Convert.ChangeType 就像您的类型支持 IConvertible 和更多的值类型(结构,仍然不适用于所有人)一样好。可能你应该看看Dapper dot net 类型转换或者只是等待我会尝试同时写一些东西。
-
变量的类型是编译时的概念。您的声明
objType newArrEmpInfo和强制转换一样零意义,因为dataSource引用的对象 已经是 它是什么类型。实际上,调用Convert.ChangeType()没有执行nothing,因为dataSource已经是您要求方法将其更改为的运行时类型。无论您实际尝试做什么,您都需要更好地解释,以便我们能够真正理解您的问题。你在这里问的问题根本没有任何意义。