MVC3网站。 EF4.1 Code First。Linq排序文本值,而不是lambda
我保存关闭会话排序列和方向,这样当用户回到页面电网仍处于相同的排序顺序。
我希望能够指定如何与我救了,像这样的数值集合进行排序。
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 2011-05-13 18:13:34
@TPSpencer我也注意到,在所有情况下,.Where(...)部分都是一样的。因为Linq是可组合的,所以你可以将所有的.Where子句从你给出的代码片段中删除,并在切换后放置一个额外的任务。就像'this.Issues = this.Issues.Where(...)'这样的东西' – 2011-05-13 19:10:19
好点Martin,谢谢你指出。你最终的代码编辑看起来很有前途。 – Terrence 2011-05-13 21:26:37