【发布时间】:2011-02-26 00:15:17
【问题描述】:
我有一个对象列表,我需要根据它们的一些属性对其进行排序。这可以很好地按一个字段对其进行排序:
reportDataRows.Sort((x, y) => x["Comment1"].CompareTo(y["Comment1"]));
foreach (var row in reportDataRows) {
...
}
我在这里看到很多例子,它们只用一个字段来做到这一点。但是我如何按一个字段排序,然后是另一个?或者如何列出许多字段?似乎使用 LINQ orderby thenby 是最好的,但我对它的了解还不够,无法知道如何使用它。
对于参数,像这样支持任意数量的字段进行排序的东西会很好:
var sortBy = new List<string>(){"Comment1","Time"};
我不想在我的每个应用程序中都编写代码来执行此操作。我计划将此排序代码移动到保存数据的类中,以便它可以执行更高级的操作,例如使用参数列表并隐式识别该字段是日期并将其排序为日期而不是字符串。 reportDataRow 对象包含具有此信息的字段,因此我不必进行任何杂乱的检查来确定该字段是否应该是日期。
【问题讨论】:
-
也许您应该考虑将其设为实际对象类型的列表,或者
reportDataRow,或者创建一个具有您想要的属性的新的、普通的 C# 类 (POCO)。更好的是使用像 LinqToSql 这样的 ORM 或实体框架。一旦你有了一个具有正确类型属性的对象列表(字符串属性、DaetTime 属性等),使用 LINQOrderBy就很简单了,大多数人认为仅使用 LINQ 内联提供的可读性比尝试抽象它更可取收拾东西。 -
我让它完全按照我的意图工作,但是谢谢。