冗長我有一個類型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