【发布时间】:2017-01-02 18:08:21
【问题描述】:
背景:我有一个巨大的表,在一个数据库中有许多列和许多条目。我有一些返回数据的预设查询,但我需要能够让用户进一步细化查询(添加更多过滤器)。
所以我的问题是我的代码如下:
var dbquery = (from a in db.test where id > 100 select a);
这会返回一个 iQueryable。现在,当我这样做时,我可以进一步过滤它(并且仍然在数据库上运行查询)
var dbquery2 = dbquery.Where(b => b.quanity > 20);
但我真正想要的是让用户能够输入过滤器并让它仍然在数据库上运行。我看过 PropertyDescriptors 但他们总是说没有合适的 linq 到 sql 的翻译。 我该怎么做这样的事情:
var dbqueryuser = dbquery.where(c => c.(user specified field) > 20);
我是否需要自定义生成的 SQL 语句,或者我可以以某种方式生成有效的
Expression<Func<test,bool>>
使用反射的语句?
注意:这是建立在我之前在这里提出的问题Linq to custom sql
我基本上需要获取过滤器列表,但要让查询在数据库上运行(因为数据库返回大量数据,我希望在数据库端而不是用户端进行尽可能多的过滤)
【问题讨论】:
-
是的,您可以动态生成
Expression<Func<test,bool>>,不是使用反射,而是使用Expression类方法。有很多关于这样做的例子,如果你想要更具体的答案,你应该发布你的过滤器定义的样子。
标签: c# linq linq-to-sql