【发布时间】:2013-03-13 14:32:58
【问题描述】:
我有一个更大/更复杂的问题,但为了简单起见,让我们考虑以下问题:
假设我在 SQL 数据库 中有一个名为 Product 的表,有两列 ID (int, primary key) 和 名称 (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 查询。
提前感谢您的帮助。
【问题讨论】:
-
感谢@Viper,我想我真的在这里寻找Dynamic LINQ。使用它,我只需拥有
IQueryable<Product> sortedQuery = query.OrderBy("Name asc");,这就是我想要的。 -
不用太兴奋并查看绿色勾号解决方案,您已经完美地描述了我的确切问题。我也在尝试与您类似的解决方案。对向下滚动感到兴奋!
标签: c# linq c#-4.0 linq-to-sql