C# 如何创建动态查询?
我有一个使用EF 4.4的存储库和一个具有参数的类,我可以使用这些参数来过滤我的查询。此外,我还使用SQLQuery创建动态原始sql,以根据参数类的属性(不为null)添加条件 然而,SQL查询不允许即时加载,所以我想知道如何使用LinQ创建动态查询,以便能够使用即时加载 我已经读过了 它使用一个参数类,但只使用一个参数进行查询,但是如果我在类中有许多参数,并且我有许多组合,那么如何进行查询呢?如果要考虑所有可能的组合,我还需要做很多其他的事情?当我使用原始sql时,我只需要检查一个paratemer是否为null,如果不为null,只需要检查是否是第一个添加“where”的paratemer,或者是否其他我添加了“and”。所以代码很短,因为我不需要考虑所有参数的组合。 如何使用LinQ进行动态查询 谢谢C# 如何创建动态查询?,c#,entity-framework-4,C#,Entity Framework 4,我有一个使用EF 4.4的存储库和一个具有参数的类,我可以使用这些参数来过滤我的查询。此外,我还使用SQLQuery创建动态原始sql,以根据参数类的属性(不为null)添加条件 然而,SQL查询不允许即时加载,所以我想知道如何使用LinQ创建动态查询,以便能够使用即时加载 我已经读过了 它使用一个参数类,但只使用一个参数进行查询,但是如果我在类中有许多参数,并且我有许多组合,那么如何进行查询呢?如果要考虑所有可能的组合,我还需要做很多其他的事情?当我使用原始sql时,我只需要检查一个parat
var query = ctx.Books;
if ( param1 != null )
query = query.Where( b => b.Param1 == param1 );
if ( another2 > 0 )
query = query.Where( b => b.Amount > another );
等等
如您所见,子句是基于任意外部条件动态组合的,最终使您能够完全控制查询结构
请注意,EF仍然将其作为单个db查询执行。您可以执行以下操作:
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
然后,使用类似以下语法执行查询(假设我们处理用户):
这将根据前面的设置向where查询添加“过滤器”
类似地,您可以将其稍微更改为“和”ing过滤器,而不是“或”ing
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);