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

O.O*_*.O. 11 c# linq linq-to-sql c#-4.0

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

我们假设我在SQL DataBase中有一个名为Product的表,它有两列,ID (int,主键)Name (varchar/string).我还有一个简单的LINQ DataContext.

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

IQueryable<Product> query = from p in db.Products select p;
Run Code Online (Sandbox Code Playgroud)

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

IQueryable<Product> sortedQuery = query.OrderBy(x => x.Name);
Run Code Online (Sandbox Code Playgroud)

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

我在尝试这样的事情:

IQueryable<Product> sortedQuery = query.OrderBy(x => (typeof(Product)).GetProperty(“Name”));
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我还想确保维护LINQ to SQL,即在SQL Server上进行排序.因此,如果我调试,我应该从这个LINQ查询获得一个SQL查询.

预先感谢您的帮助.

Vip*_*per 16

你可以用它Dynamic Linq来达到这个目的.

请参见此处动态LINQ(第1部分:使用LINQ动态查询库)

然后你可以这样打电话:

var query = DBContext.Users.Where( "Age > 3" ).OrderBy( "Name asc" );
Run Code Online (Sandbox Code Playgroud)

  • 谢谢毒蛇.这正是我所寻找的.对于其他人,您需要安装Nuget包`System.Linq.Dynamic`并引用它以使其编译. (4认同)

Iro*_*n84 9

试试这个:

query.OrderBy(x => x.GetType().GetProperty(“Name”).GetValue(x, null));
Run Code Online (Sandbox Code Playgroud)

你不能抓住房产.你需要获取该属性的值,因此调用GetValue.