如何动态添加降序到orderby?

s k*_*s k 6 c# linq

我可以使用orderby语句动态构建Linq Query,如下所示:

var Query = from q in Db.TblUsers select q;

switch (Order)
{
    case "Name": Query = from q in Query orderby q.Name select q; break;
    case "DOB": Query = from q in Query orderby q.DOB select q; break;
    // ... and more cases
}

var Result = Query.ToList();
Run Code Online (Sandbox Code Playgroud)

但是,如果需要按顺序降序(取决于UI中的用户选择),我将不得不构造另一个switch语句复制所有情况,只是为了在orderby之后添加"descending"关键字.

例:

if (ascending)
{
    switch (Order)
    {
        case "Name": Query = from q in Query orderby q.Name select q; break;
        // ....
    }
}
else
{
    switch (Order)
    {
        case "Name": Query = from q in Query orderby q.Name descending select q; break;
        // ....
    }
}
Run Code Online (Sandbox Code Playgroud)

我有办法动态地将降序关键字添加到查询中吗?

Joh*_*ers 2

这不是很好,但也没有那么糟糕:

var Query = Db.TblUsers.AsQueryable();

switch (Order)
{
    case "Name": Query = ascending ? 
                     Query.OrderBy(q=>q.Name) : 
                     Query.OrderByDescending(q=>q.Name);
        break;
    case "DOB": Query = ascending ? 
                     Query.OrderBy(q=>q.DOB) : 
                     Query.OrderByDescending(q=>q.DOB);
        break;
    // ... and more cases
}

var Result = Query.ToList();
Run Code Online (Sandbox Code Playgroud)