如何在c#中通过表达式构建动态查询

时间:2015-01-12 14:09:32

标签: c# entity-framework expression-trees

首先,我有一个如下变量:

List<string> values;

现在我需要构建查询条件,如下所示:

Expression<Func<docinstance, bool>> filter = d=>d.values.any(o=>o.value==values[0]||o.value==value[1]||.....)

因为我不知道变量值中有多少项,所以如何构建查询条件

3 个答案:

答案 0 :(得分:5)

您可以在

中再次使用Any
d => d.values.Any(o => values.Any(x => x == o.value))

答案 1 :(得分:1)

您可以使用Contains

d => d.values.Any(o => values.Contains(o.value))

请参阅Documentation

答案 2 :(得分:0)

EF的DbContext类有一个方法Set<TEntity>(),返回类型为DbSet<TEntity>,它实现Queryable interface,它将所有查询方法都作为扩展方法。

最后将您的查询表达式翻译成SQL然后执行。这为您提供了所需的功能,以便您可以组合查询方法并构建动态表达式。