冗长我有一个类型DataTable进行排序只是类似:减少的(我)的LINQ列表排序
DataTable.DefaultView.Sort("sortexpression");
因为排序表达式是一个字符串,我可以只添加这两种排序字段和方向几行,不管我有多少种排序选项。现在使用LINQ林清楚地做一些非常错误的,因为做同样的事情,我这样做:
this.GetSortExpressions();
if ((ViewState["SortDirection"] as string) == "ASC")
{
switch (ViewState["SortField"] as string)
{
case "LKey":
this.SortedDetails = this.Details.OrderBy(d => d.LKey);
break;
case "MName":
this.SortedDetails = this.Details.OrderBy(d => d.MaterialName);
break;
case "FMSQOH":
this.SortedDetails = this.Details.OrderBy(d => d.FMSQOH);
break;
case "CCQOH":
this.SortedDetails = this.Details.OrderBy(d => d.CCQOH);
break;
case "FMSQOHVary":
this.SortedDetails = this.Details.OrderBy(d => d.FMSQOHVary);
break;
default:
this.SortedDetails = this.Details.OrderBy(d => d.LKey);
break;
}
}
else
{
switch (ViewState["SortField"] as string)
{
case "LKey":
this.SortedDetails = this.Details.OrderByDescending(d => d.LKey);
break;
case "MName":
this.SortedDetails = this.Details.OrderByDescending(d => d.MaterialName);
break;
case "FMSQOH":
this.SortedDetails = this.Details.OrderByDescending(d => d.FMSQOH);
break;
case "CCQOH":
this.SortedDetails = this.Details.OrderByDescending(d => d.CCQOH);
break;
case "FMSQOHVary":
this.SortedDetails = this.Details.OrderByDescending(d => d.FMSQOHVary);
break;
default:
this.SortedDetails = this.Details.OrderByDescending(d => d.LKey);
break;
}
}
这是上帝可怕。我很担心我为每个新的排序字段添加2 * n个case语句。什么是正确的方式?执行排序(未经测试)之前
为什么将'OrderByDescending'的结果转换为'IOrderedEnumerable'?它已经返回。 – 2012-03-08 04:54:09
嗨,我刚刚清理过。这是从以前的混乱中解酒。 – rism 2012-03-08 04:59:03
你有控制''ViewState [“SortField”]''它是类型吗?如果是这样,你可以把它变成别的东西然后''字符串'? LINQ的全部重点是保证类型安全 - 字符串将它从您身边带走。 – 2012-03-08 08:15:48