我想构建一个表达式以通过EF Core 2.1查询到我的数据库中
我有代表表中实体的Data
类:
public class Data
{
public string Id1 {get;set;}
public string Id2 {get;set;}
}
然后我要构建一些表达式:
var parameter = Expression.Parameter(typeof(Data), "x");
var memberId1 = Expression.Field(parameter, nameof(Data.Id1));
var memberId2 = Expression.Field(parameter, nameof(Data.Id2));
[当我想从Field
中获得Id1
时,我得到了这个期望:
System.ArgumentException:未为类型'Entities.Data'定义实例字段'Id1'在System.Linq.Expressions.Expression.Field(表达式,字符串fieldName)
如何从我的Data
类获取权限?
您引用的是类型Data
,而不是该类型的实例。有了实例后,您的语法将需要引用该实例。例如:
var parameter = Expression.Parameter(typeof(Data), "x");
// create an instance of the Data class
// (you will need to create this instance in a way that
// works with your needs, I'm just giving an example...)
var data = new Data();
var memberId1 = Expression.Field(parameter, nameof(data.Id1));
var memberId2 = Expression.Field(parameter, nameof(data.Id2));
我的Id1
和Id2
不是字段,而是Property
。现在可以正常工作:
var parameter = Expression.Parameter(typeof(Data), "x");
var memberId1 = Expression.Property(parameter, nameof(Data.Id1));
var memberId2 = Expression.Property(parameter, nameof(Data.Id2));