我想将排序字段和方向动态传递给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);
}
}
答案 0 :(得分:1)
Queryable.OrderBy
扩展方法采用Expression<Func<TSource, TKey>>
类型的参数。这不必使用lambda表达式创建,但可以通过Expression类手动构造,这允许您在代码中动态构造任何类型的表达式。这可用于创建动态OrderBy方法。
我还在最近的一个问题中读到了LINQ Dynamic Query Library,其中似乎有一种方法可以做到这一点。它显然包含在VS2008的一些示例集合中作为代码示例,请阅读链接以获取更多信息。