c# – Linq To SQL:按任意属性(列)名称排序查询

我有一个更大/更复杂的问题,但为了简单起见,让我们考虑以下几点:

让我们说我在sql DataBase中有一个名为Product的表,它有两列,ID(int,主键)和Name(varchar / string).我也有一个简单的LINQ DataContext.

我有一个查询构造并交给“我的”功能.让我们说这是一样的:(虽然可能有点复杂)

IQueryable<Product> query = from p in db.Products select p;

一旦我的方法获取查询,作为参数传入,它必须更改排序顺序,例如

IQueryable<Product> sortedQuery = query.OrderBy(x => x.Name);

我想让这个更通用,即指定要排序的字段.通常,我可以做一个需要一个字符串的switch语句.但是我想知道是否有一种直接传递参数的方法.我打算将其扩展到其他数据库表,所以这些switch语句将变得乏味.

我在尝试像:

IQueryable<Product> sortedQuery = query.OrderBy(x => (typeof(Product)).GetProperty(“Name”));

但这不行.我也想确保LINQ to sql被维护,即在sql Server上完成的排序.因此,如果我调试,我应该从这个LINQ查询得到一个SQL查询.

预先感谢您的帮助.

解决方法

您可以为此目的使用Dynamic Linq.

见这里Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)

然后你可以打电话:

var query = DBContext.Users.Where( "Age > 3" ).OrderBy( "Name asc" );

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...