如何创建动态查询
本文关键字:动态 查询 创建 何创建 | 更新日期: 2023-09-27 18:18:25
我有一个使用EF 4.4的存储库和一个类,该类具有可用于过滤查询的参数。此外,我还使用SQLQuery创建动态原始sql,以便根据参数类的非空属性添加条件。
然而,SQL查询不允许动态加载,所以我想知道如何用LinQ创建动态查询,以便能够使用动态加载。
我读过这篇文章
使用参数类,但只使用一个参数来执行查询,但如果类中有许多参数,并且有许多组合,如何执行查询?如果考虑到所有可能的组合,我需要做很多其他的?当我使用原始sql时,我只需要检查参数是否为空,如果不为空,只检查是否是添加"where"的第一个参数,或者如果其他我添加"and"。所以代码很短,因为我不需要考虑所有可能的参数组合。
如何使用LinQ进行动态查询?
谢谢。
var query = ctx.Books;
if ( param1 != null )
query = query.Where( b => b.Param1 == param1 );
if ( another2 > 0 )
query = query.Where( b => b.Amount > another );
等。
正如你所看到的,子句是根据任意的外部条件动态组成的,最终你可以完全控制查询结构。
你可以这样做:
bool consider1stParam = is it not null?
bool consider2ndParam = is it not null?
bool consider3rdParam = is it not null?
... //And so on for each parameter you wish to include in the query
然后,使用类似于下面的语法执行查询(假设我们处理用户):
users = users
.Where(u => (consider1stParam && (Your 1st param examination here)) ||
(consider2ndParam && (Your 2nd param examination here)) ||
(consider3rdParam && (Your 3rd param examination here))
... and so on);
这将根据先前的设置为where查询添加"过滤器"。
同样地,你可以稍微改变一下,让它变成"And"过滤器而不是"Or"过滤器