假设我有以下课程:
public class Model {
public AnotherModel InnerModel {
get;
set;
}
}
public class AnotherModel {
public String Value{
get;
set;
}
}
现在我有以下功能:
public static void Foo<T, U>(Expression<Func<T, U>> func) {
// Get the property info from func
}
我现在想做的是:
Foo<Model, String>(o => o.InnerModel.Value)
问题来了:
我知道您可以通过执行以下操作从表达式 func 中获取 PropertyInfo:
PropertyInfo propertyInfo = (PropertyInfo)((MemberExpression)func.Body).Member;
这将为我提供 Value 属性的 PropertyInfo。但是,我还想获取有关父属性的信息,即 InnerModel 属性。
到目前为止我所知道的是我可以执行以下操作:
((MemberExpression)func.Body).Expression
获取父属性的信息。但是,似乎不可能从表达式本身提取 PropertyInfo。
有没有某种方法可以实际检索表达式的 PropertyInfo?
编辑:
澄清一下,这可能是一个糟糕的尝试方式,但这里是:
我不能为此使用 EntityFramework,只是为了确保人们理解这一点。
我需要通过 API 与一个数据库进行通信。
该数据库具有如下方式的通常关系:
工作台螺纹
用户ID -> 用户.用户ID
现在将其提取到模型中。按照上面的例子:
class Thread {
[Reference(USER_USERID)]
[TableKey(THREAD_USERID)]
public User user {
get;set;
}
}
class User {
[TableKey(USER_USERID)]
public int UserId {
get;set;
}
}
现在我想对此提出疑问。所以我想“嘿,让我们使用表达式来简化最终用户如何请求东西,是的。”
所以,我们可以做类似 EqualTo(o => o.user.UserId, 1); 的事情
但是,由于 TableKey 属性与引用键不同,我需要首先从数据库中获取 Thread 表中的 userId,然后使用该 Id 开始向 User 表询问该 id 的信息。
也许这澄清了这一切的目的,也可能没有。