是否可以从InvocationExpression获取属性?

时间:2013-03-29 12:45:12

标签: c# linq

我有以下代码:

      var existing = new[] { "first", "second" };
      Func<TestType, string> func = type => type.TextCol;

      Expression<Func<TestType, bool>> exp = q => existing.Contains(func(q));

并拥有Expression访客。 访问者在原始表达式中看到MethodCallExpression Contains,它有两个参数 - 一个是字符串值数组,第二个是InvocationExpression,它是原始表达式中的func(q)部分。

我需要以某种方式从原始函数中使用的InvocationExpression中提取属性名称。我认为这应该是可能的,但是看看调试器中的InvocationExpression实例无法知道怎么可能有人可以提供帮助?

更新

我打算做的是

public IEnumerable<TEntity> FindExisting<TEntity, TValue>(IEnumerable<TEntity> list, Func<TEntity, TValue> property)
{
     var values = list.Select(property);
     Expression<Func<TEntity, bool>> exp = q => list.Contains(property(q)); 
     return db.Select<TEntity>(exp);
}

更新2

全文:) 所以ServiceStack.OrmLite有方法SaveAll,它接受​​实体列表,检查数据库中哪些存在并更新它们,插入休息。所有这一切都运行正常,问题是,他们正在使用Id字段来检查项目是否存在于数据库中。在我的情况下,我有另一个唯一的字段,它是外部系统中的主键,当我从外部系统获取实体时,我检查是否需要插入或更新它们将更容易使用该字段,而不是Id,所以我以为我会编写扩展方法,它和SaveAll一样,只是有可能传递属性,用于确定项目是否需要更新或插入。

0 个答案:

没有答案