MVC3 웹 사이트. EF4.1 코드 우선.Linq 텍스트 값으로 필터링, 람다가 아닌
정렬 열과 방향을 세션에 저장하므로 사용자가 다시 페이지로 돌아올 때 그리드가 여전히 동일한 정렬 순서로 유지됩니다.
이렇게 저장 한 값으로 컬렉션을 정렬하는 방법을 지정할 수 있기를 원합니다.
this.Issues = this.db.ITIssues.Orderby (this.sort + ""+ this.sortdir) ...
은 현재 내가 switch 문을 사용하여 필드의 모든 다른 조합을 처리해야 + 정렬 방향. 더 좋은 방법이 있습니까?switch (this.Sort)
{
case "ITApplication.Name":
if (this.SortDir == "ASC")
this.Issues = this.db.ITIssues.OrderBy(i => i.ITApplication.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
else
this.Issues = this.db.ITIssues.OrderByDescending(i => i.ITApplication.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
case "ITIssueType.Name":
if (this.SortDir == "ASC")
this.Issues = this.db.ITIssues.OrderBy(i => i.ITIssueType.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
else
this.Issues = this.db.ITIssues.OrderByDescending(i => i.ITIssueType.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
case "CurrentStatus.Name":
if (this.SortDir == "ASC")
this.Issues = this.db.ITIssues.OrderBy(i => i.CurrentStatus.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
else
this.Issues = this.db.ITIssues.OrderByDescending(i => i.CurrentStatus.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
case "CurrentAssignedTo.Fname":
if (this.SortDir == "ASC")
this.Issues = this.db.ITIssues.OrderBy(i => i.CurrentAssignedTo.Fname).Where(i => i.ITAppGroupID == this.ITAppGroupID);
else
this.Issues = this.db.ITIssues.OrderByDescending(i => i.CurrentAssignedTo.Fname).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
case "CreatedBy.Fname":
if (this.SortDir == "ASC")
this.Issues = this.db.ITIssues.OrderBy(i => i.CreatedBy.Fname).Where(i => i.ITAppGroupID == this.ITAppGroupID);
else
this.Issues = this.db.ITIssues.OrderByDescending(i => i.CreatedBy.Fname).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
case "CurrentPriority.Name":
if (this.SortDir == "ASC")
this.Issues = this.db.ITIssues.OrderBy(i => i.CurrentPriority.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
else
this.Issues = this.db.ITIssues.OrderByDescending(i => i.CurrentPriority.Name).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
default:
this.Issues = this.db.ITIssues.OrderByDescending(i => i.ID).Where(i => i.ITAppGroupID == this.ITAppGroupID);
break;
}
마틴, 훌륭한 제안과 코드에 감사드립니다. 나는 모든 사람들이 동적 인 정렬 순서를 정하기 위해 switch 문을 사용한다고 믿기가 어렵다. 나는 ... linq이 "보이는 것"을 쓰는 두건에서 어떻게 작동하는지에 대해 충분히 알지 못한다. 나는 더 많은 코멘트가있을 때까지 기다릴 것이고, 더 이상 들어 오지 않으면 나는 이것을 답으로 표시 할 것이다. 고마워. – Terrence
@TPSpencer 나는 또한 모든 경우에 .Where (...) 부분이 동일하다는 것을 알아 챘다. Linq가 구성 가능하기 때문에, 당신은 주어진 코드 스 니펫에서 모든 .Where 절을 제거하고 전환 직후에 추가 할당을 할 수있었습니다. 이게 뭔가. 문제 = 이거. 문제. 어디서 (...). –
좋은 지적 마틴, 지적 해 주셔서 고마워. 최종 코드 편집이 유망 해 보입니다. – Terrence