c# - 如何动态添加降序到orderby?

标签 c# linq

我可以使用 orderby 语句动态构造 Linq 查询,如下所示:

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();

但是,如果需要降序排列(取决于用户在 UI 中的选择),我将不得不构造另一个 switch 语句来复制所有情况,只是在 orderby 之后添加“降序”关键字。

例子:

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;
        // ....
    }
}

有没有办法让我动态地向查询添加降序关键字?

最佳答案

给定:

public static class OrderByEx
{
    public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, bool ascending)
    {
        if (ascending)
        {
            return source.OrderBy(keySelector);
        }

        return source.OrderByDescending(keySelector);
    }
}

您可以:

var Query = Db.TblUsers.AsQueryable();

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

关于c# - 如何动态添加降序到orderby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30961757/

相关文章:

c# - 如何在内部网中连接到 Access 上的数据库

c# - 使用 md5 将密码保存为二进制文件并将其与数据库进行比较

c# - 分析 C# .net 代码的 CPU 缓存?

c# - 为 LINQ to Objects 定义我自己的 Where-Method - 我如何知道将使用哪一个?

c# - 如何对每个内部条目平均 List<List<double>> ?

c# - 将 Entity Framework 调用绑定(bind)到一个公共(public)参数,例如 UserId

c# - 过滤 GroupJoin 查询

c# - 在 .NET 中创建阻塞 Queue<T>?

c# - 将 linq 查询创建为字符串

c# - Linq FirstOrDefault - 一个类轮