c# 构建IEnumerable<T>.Contains表达式树
时间: 2024-02-20 07:58:25 浏览: 26
您可以使用Expression.Call方法构建Contains表达式树,如下所示:
```csharp
var listExpression = Expression.Constant(yourList);
var parameterExpression = Expression.Parameter(typeof(T), "item");
var containsMethod = typeof(Enumerable).GetMethods()
.Where(m => m.Name == "Contains" && m.GetParameters().Length == 2)
.Single()
.MakeGenericMethod(typeof(T));
var containsExpression = Expression.Call(containsMethod, listExpression, parameterExpression);
var lambdaExpression = Expression.Lambda<Func<T, bool>>(containsExpression, parameterExpression);
```
其中,yourList是IEnumerable<T>类型的列表,T是泛型参数,parameterExpression是表示列表中每个元素的参数,containsMethod是Enumerable.Contains方法的MethodInfo对象,containsExpression是调用Contains方法的表达式树,lambdaExpression是最终的Lambda表达式。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)