LINQ to SQL动态排序

时间:2010-09-23 21:26:55

标签: c# linq-to-sql sorting

我想将排序字段和方向动态传递给LINQ to SQL代码。但我无法找到这样的表现方式,因为如果我不能写 users.OrderBy(d => 字段);

有没有办法传递动态字段进行排序?感谢。

private static IQueryable<user> GetUserData(String Field, String Direction)
{
    UserDataContext dc = new UserDataContext();

    var users = from d
                    in dc.users
                orderby Field ascending
                select d;

    if (Direction == "ascending")
    {
        return users.OrderBy(d => d.userName);
    }
    else
    {
        return users.OrderByDescending(d => d.userName);
    }
}

1 个答案:

答案 0 :(得分:1)

Queryable.OrderBy扩展方法采用Expression<Func<TSource, TKey>>类型的参数。这不必使用lambda表达式创建,但可以通过Expression类手动构造,这允许您在代码中动态构造任何类型的表达式。这可用于创建动态OrderBy方法。

我还在最近的一个问题中读到了LINQ Dynamic Query Library,其中似乎有一种方法可以做到这一点。它显然包含在VS2008的一些示例集合中作为代码示例,请阅读链接以获取更多信息。