我想构建表达式时没有为类型定义属性

问题描述 投票:-1回答:2

我想构建一个表达式以通过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类获取权限?

c# lambda expression-trees
2个回答
1
投票

您引用的是类型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));

1
投票

我的Id1Id2不是字段,而是Property。现在可以正常工作:

var parameter = Expression.Parameter(typeof(Data), "x");
var memberId1 = Expression.Property(parameter, nameof(Data.Id1));
var memberId2 = Expression.Property(parameter, nameof(Data.Id2));
© www.soinside.com 2019 - 2024. All rights reserved.