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)时,查询将抛出一个异常“嵌套太深”。