Asp.net 如何在LINQ中使用多个order by?

Asp.net 如何在LINQ中使用多个order by?,asp.net,linq,sorting,Asp.net,Linq,Sorting,我想在我的查询中使用多个order by,我正在使用LINQ。我是LINQ新手,我已经尝试了stackoverflow上给出的示例。但我不知道为什么这些都不适合我,我肯定我错了一些地方。下面是我的情况。 我得到了一个使用LINQ创建的项目。我并没有什么任务来设置列的顺序。实际上,我的任务是创建一个列,它的排序日期是现在。现在我想使用Createddate和sortOrder列进行排序。下面是用于排序的代码: 页面加载方法中的代码 ViewState["SortDirection"] = "des

我想在我的查询中使用多个order by,我正在使用LINQ。我是LINQ新手,我已经尝试了stackoverflow上给出的示例。但我不知道为什么这些都不适合我,我肯定我错了一些地方。下面是我的情况。 我得到了一个使用LINQ创建的项目。我并没有什么任务来设置列的顺序。实际上,我的任务是创建一个列,它的排序日期是现在。现在我想使用Createddate和sortOrder列进行排序。下面是用于排序的代码: 页面加载方法中的代码

ViewState["SortDirection"] = "desc";
ViewState["SortColumn"] = "createddate";
BindAllTopics(ViewState["SortDirection"].ToString(), ViewState["SortColumn"].ToString());
我的BindAllTopic方法如下:

 protected void BindAllTopics(string SortType, string SortColumn)
{
    var LstTopics = (from topic in Dbobj.T_topic select topic).ToList();
    if (LstTopics.Count() > 0)
    {
        if (SortType == "ASC")
        {
            LstTopics = LstTopics.OrderBy(q => q.Name).ToList();
        }
        else
        {
            LstTopics = LstTopics.OrderByDescending(q => q.Name).ThenBy(q => q.SortOrder).ToList();
        }
        GrdTopics.DataSource = LstTopics.ToList();
        GrdTopics.PageSize = 25;
        GrdTopics.DataBind();

    }
    else
    {
        GrdTopics.DataSource = null;
        GrdTopics.DataBind();
        lblMsg.DisplayMessage(StatusMessages.InfoMessage, "No Topics Found.");
    }
}
我想先按int类型的sortorder排序,然后按Createddate排序


请帮帮我。

您可以在trail中再添加一个


校正后,您可以通过动态Linq实现这一点

LstTopics = LstTopics.OrderBy(SortColumn + " " +  SortType);)

如果您不想使用动态Linq,请参见下面Marc Gravell的回答


您不必总是使用
ToList
创建新列表。如果你需要的话,一次就足够了。什么是排序字段?列名称也必须是“排序依据”?我想你的问题是,它总是按
name
排序,然后按
SortOrder
?问题是什么?我想先按排序器排序,然后按日期排序。
Name
不是来自页面加载,这是
主题的一个属性
我想OP希望订单来自parameter@Jodrell我已经更正了答案,谢谢你指出它out@raman请看我的最新答案,你可以通过动态林奇来实现。了解“向下投票”按钮非常有吸引力,但请解释为什么“向下投票”按钮我认为OP会喜欢来自参数的顺序
LstTopics = LstTopics.OrderBy(SortColumn + " " +  SortType);)