有没有解决这个代码从NHibernate生成NotSupportedException?

时间:2013-02-19 11:41:12

标签: c# linq nhibernate notsupportedexception nhlambdaextensions

以下是代码:

list = query.Where(x => ((string)x.GetType()
    .GetProperty(propertyName).GetValue(this, null))
        .EndsWith(filterValue)).ToList();

这段代码是一个重构的代码,如果我把它分解为它的对象和属性级别,它将需要我在我的代码项目周围重复它一百次。根据我在这个网站上的研究,它与SQL翻译有关。但是,这个代码或其变体可以正常工作吗?

1 个答案:

答案 0 :(得分:3)

解决方案是创建一个表达式,该表达式返回指定的属性并将该表达式传递给Where

var query = session.Query<YourType>();
list = query.Where(GetExpression<YourType>(propertyName, filterValue)).ToList();

GetExpression看起来像这样:

public static Expression<Func<T, bool>> GetExpression<T>(string propertyName,
                                                  string filterValue)
{
    var parameter = Expression.Parameter(typeof(T));
    var property = Expression.Property(parameter, propertyName);
    var method = typeof(string).GetMethod("EndsWith", new [] { typeof(string) });
    var body = Expression.Call(property, method,
                               Expression.Constant(filterValue));
    return (Expression<Func<T, bool>>)Expression.Lambda(body, parameter);
}