C# 如何在c语言中用表达式建立动态查询#

C# 如何在c语言中用表达式建立动态查询#,c#,entity-framework,expression-trees,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]||.....) 列表值; 现在我需要如下生成查询条件: List<string> values; Expression<Func<docins

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

List<string> values;
Expression<Func<docinstance, bool>> filter = d=>d.values.any(o=>o.value==values[0]||o.value==value[1]||.....)
列表值;
现在我需要如下生成查询条件:

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

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

您可以在内部再次使用
Any

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

您可以在内部再次使用
Any

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

您可以使用
包含

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

请参见您可以使用
包含

d => d.values.Any(o => values.Contains(o.value))
请参见

EF类有一个返回类型为的方法,该方法实现了所有查询方法作为扩展方法

最后,将中的查询表达式转换为SQL,然后执行。它为您提供了所需的功能,以便您可以组合查询方法并构造动态表达式。

EF类有一个返回类型为的方法,该方法实现了所有查询方法作为扩展方法


最后,将中的查询表达式转换为SQL,然后执行。这将为您提供所需的功能,以便您可以组合查询方法和构造动态表达式。

这将生成一个双列EXIST和
2(n-1)
单行表的并集<代码>包含
更好(子句中的1)。@GertArnold-在哪些方面更好?执行速度更快吗?查询执行计划是否不同?
包含
有可伸缩性问题,但是
任何
都是不可伸缩的。当
values
有相对多的元素(~50)时,查询将抛出一个异常“嵌套太深”。这将生成一个双列EXIST和
2(n-1)
单行表的并集<代码>包含
更好(子句中的1)。@GertArnold-在哪些方面更好?执行速度更快吗?查询执行计划是否不同?
包含
有可伸缩性问题,但是
任何
都是不可伸缩的。当
有相对多的元素(~50)时,查询将抛出一个异常“嵌套太深”。