У меня был набранный DataTable, который для сортировки был просто что-то вроде:
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 для каждого нового поля сортировки. Как правильно, пожалуйста?