动态创建的表达式
Dynamically created expression
我尝试为 Linq 查询动态创建一个表达式,但它只返回这条消息:
{Method = Internal Error evaluating expression}
I use Vs 2019 and .NET Core 3.1.
class Client {
public string Name { get; set; }
...
}
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; }
}
}
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.
我尝试为 Linq 查询动态创建一个表达式,但它只返回这条消息:
{Method = Internal Error evaluating expression} I use Vs 2019 and .NET Core 3.1. class Client { public string Name { get; set; } ... }
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; }
}
}
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.