首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

动态Linq字符串“Contains”表达式

在使用动态 LINQ 时,如果你想构建一个基于字符串 "Contains" 的表达式,你可以使用 Expression.Call 方法来创建一个 Contains 调用表达式

代码语言:javascript
复制
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表达式过滤给定的列表。

你可以根据需要修改这个示例,例如从对象列表中提取字符串属性或更改搜索条件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券