정렬의 상세도를 감소 내가 좋아하는 뭔가했다 정렬 입력 된 DataTable을했다 :(내) Linq에 목록
DataTable.DefaultView.Sort("sortexpression");
정렬 expression이 문자열 이었기 때문에 난 그냥 정렬 필드와 방향을 모두 추가 할 수 내가 가지고있는 정렬 옵션의 수와 관계없이 두 줄. 이제 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'으로 캐스팅하고 있습니까? 그것은 이미 그것을 반환합니다. –
안녕하세요, 방금 청소했습니다. 이전의 혼란으로부터 숙취였습니다. – rism
''ViewState [ "SortField"]''를 제어 할 수 있습니까? 그렇다면 뭔가 다른 문자열을 만들 수 있습니까? LINQ의 핵심은 유형 안전성입니다. 즉 문자열은 여러분을 멀리합니다. –