在使用动态 LINQ 时,如果你想构建一个基于字符串 "Contains" 的表达式,你可以使用 Expression.Call
方法来创建一个 Contains
调用表达式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
public class DynamicLinqContainsExample
{
public static void Main()
{
List<string> items = new List<string> { "apple", "banana", "cherry", "orange" };
string searchString = "an";
// 创建参数表达式
ParameterExpression parameter = Expression.Parameter(typeof(string), "x");
// 创建成员表达式(如果需要从对象中获取字符串属性)
// 假设我们有一个类 Item { public string Name { get; set; } }
// MemberExpression member = Expression.PropertyOrField(parameter, "Name");
// 字符串 "Contains" 方法的表达式
MethodCallExpression containsMethod = Expression.Call(
parameter,
typeof(string).GetMethod("Contains", new[] { typeof(string) }),
Expression.Constant(searchString)
);
// 创建 Lambda 表达式
Expression<Func<string, bool>> lambda = Expression.Lambda<Func<string, bool>>(containsMethod, parameter);
// 编译 Lambda 表达式
Func<string, bool> compiledLambda = lambda.Compile();
// 使用编译后的 Lambda 表达式进行过滤
var filteredItems = items.Where(compiledLambda).ToList();
Console.WriteLine("Filtered items:");
foreach (var item in filteredItems)
{
Console.WriteLine(item);
}
}
}
这个示例首先创建了一个包含一组成员的列表。然后,它为字符串 "Contains" 方法构建了一个表达式,将其与要搜索的字符串(searchString)进行了比较。接下来,它创建了一个Lambda表达式,并使用compiledLambda
编译此表达式。最后,它使用编译后的Lambda表达式过滤给定的列表。
你可以根据需要修改这个示例,例如从对象列表中提取字符串属性或更改搜索条件。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云