动态创建的表达式

问题描述 投票:0回答:1

我尝试动态地为Linq查询创建一个表达式,但它只返回此消息:

{{方法=内部错误评估表达式}我使用Vs 2019和.NET Core 3.1。客户类别{公共字符串名称{get;组; }...}

        var parameter = Expression.Parameter(typeof(Client), "x");
        var member = Expression.Property(parameter, "Name");
        var constant = Expression.Constant("X Y");
        var exp = Expression.Equal(member, constant);
        var func = Expression.Lambda(exp, parameter).Compile();

请问我在哪里出错?

更新

namespace Domain
{
public class Client
{
    public string Name { get; set; }

    public string UserName { get; set; }

    public string Department { get; set; }

    public string CompanyPhoneNumber { get; set; }

    public string PrivateMobileNumber { get; set; }

    public string ComputerName { get; set; }

    public Guid InternetProviderId { get; set; }

    public virtual InternetProvider InternetProvider { get; set; }

    public string OtherInternetProvider { get; set; }
}
}
c# asp.net-core expression
1个回答
1
投票

Expression.Lambda方法具有允许指定委托类型的通用版本,最后一行可以修改为:

var func = Expression.Lambda<Func<Client, bool>>(exp, parameter).Compile();

使用示例:

var list = new List<Client>
{
    new Client() { Name = "X Y"}
};

var l2 = list.Where(func).ToList();

工作示例:here

© www.soinside.com 2019 - 2024. All rights reserved.