【问题标题】:Returning a nested generic Expression<Func<T, bool>>返回一个嵌套的泛型 Expression<Func<T, bool>>
【发布时间】:2009-05-13 19:43:56
【问题描述】:

错误消息是“找不到类型或命名空间名称'T'。”

???

public static Expression<Func<T, bool>> MakeFilter(string prop, object val)
{
    ParameterExpression pe = Expression.Parameter(typeof(T), "p");
    PropertyInfo pi = typeof(T).GetProperty(prop);
    MemberExpression me = Expression.MakeMemberAccess(pe, pi);
    ConstantExpression ce = Expression.Constant(val);
    BinaryExpression be = Expression.Equal(me, ce);
    return Expression.Lambda<Func<T, bool>>(be, pe);
}

相关链接:

Using reflection to address a Linqed property

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/df9dba6e-4615-478d-9d8a-9fd80c941ea2/

Runtime creation of generic Func<T>

【问题讨论】:

    标签: c# .net linq lambda


    【解决方案1】:

    您需要将方法本身设为通用:

    public static Expression<Func<T, bool>> MakeFilter<T>(string prop, object val)
                                                      -+-
                                                       ^
                                                       +- this
    

    【讨论】:

      【解决方案2】:

      没有为您的方法定义通用参数。你应该定义一个(MakeFilter&lt;T&gt;):

      public static Expression<Func<T, bool>> MakeFilter<T>(string prop, object val)
      {
          ParameterExpression pe = Expression.Parameter(typeof(T), "p");
          PropertyInfo pi = typeof(T).GetProperty(prop);
          MemberExpression me = Expression.MakeMemberAccess(pe, pi);
          ConstantExpression ce = Expression.Constant(val);
          BinaryExpression be = Expression.Equal(me, ce);
          return Expression.Lambda<Func<T, bool>>(be, pe);
      }
      

      【讨论】:

        【解决方案3】:

        方法需要声明为泛型(MakeFilter&lt;T&gt;):

        public static Expression<Func<T, bool>> MakeFilter<T>(string prop, object val)
        

        否则,调用者将如何指定T 是什么?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-27
          相关资源
          最近更新 更多