C#排序表由2列组成

s5s*_*s5s 5 c# datatable select sql-order-by

我有一个包含CustomerName和Age列的两列表.我拥有DataTable中的所有数据.我希望通过降序Age来对其进行排序,然后按名称对每个年龄组进行排序.因此,所有30岁的人都将按照所有人的名义进行分类,并列在29岁至31岁等人名单之间.

我有:

string selectStatement = "Age";
string sortStatement = "Age DESC"

var rows = table.Select(selectStatement, sortStatement);
Run Code Online (Sandbox Code Playgroud)

这应该按年龄排序.我还没想出如何按字母顺序对每个年龄组进行排序,但上面引发了异常:

过滤器表达式"Age"不会计算为布尔项.

Vla*_*lov 4

正如@adrift 所说。您应该发送一个过滤表达式(其计算结果为布尔值)作为第一个参数。尝试在那里发送 null 和一个空字符串,也许 Select 会忽略该参数。或者给它一些简单的表达式,比如 0<1。然后按部分顺序,您可以用逗号分隔几个字段:“年龄描述,姓名”。

但更好的是,您应该使用 DataView 类。像这样:

var dt = new DataTable(); // your data.
var view = new DataView(dt);
view.Sort = "Age desc, Name asc";
Run Code Online (Sandbox Code Playgroud)

然后您可以将此类设置为某些控件等的数据源。它将按正确的顺序返回行。或者您可以简单地使用 foreach 来迭代行。

foreach (DataRowView dr in view)
{
    //do what you like
}
Run Code Online (Sandbox Code Playgroud)