【问题标题】:NHibernate where restrictions with an aliasNHibernate where 用别名限制
【发布时间】:2015-12-18 00:30:03
【问题描述】:

我正在尝试查询 where someProperty.contains(string) || otherProperty.contains(string) 所以我发现了以下内容:

.where(
 restrictions.on<type>(x => x.property).IsLike(string) ||
 restrictions.on<type>(x => x.prop2).IsLike(string)
)

但是,在此之前我有一个别名,用于连接的属性之一:

session.QueryOver<Trade>()
   .JoinAlias(x => x.TradeType, () => ttypeAlias)
   .Where(
       Restrictions.On<Trade>(c => c.Nickname).IsLike("%" + searchString + "%") ||
       Restrictions.On<TradeType>(() => ttypeAlias.TradeTypeName).IsLike("%" + searchString + "%") ||
   )

但我在使用别名的限制行上遇到错误:

委托类型不接受 0 个参数

() => ttypeAlias.TradeTypeName

如何合并此别名?

【问题讨论】:

    标签: c# nhibernate queryover


    【解决方案1】:

    这是上面使用的 .On() 的语法:

    /// <summary>
    /// Build an ICriterion for the given property
    /// </summary>
    /// <param name="expression">lambda expression identifying property</param>
    /// <returns>returns LambdaRestrictionBuilder</returns>
    public static LambdaRestrictionBuilder On<T>(Expression<Func<T, object>> expression)
    {
        ExpressionProcessor.ProjectionInfo projection = ExpressionProcessor.FindMemberProjection(expression.Body);
        return new LambdaRestrictionBuilder(projection);
    }
    

    这给了我们答案:

    传递的表达式必须一个参数(不必使用)

    有效的语法可能是这样的:

    // no argument - it is wrong
    // Restrictions.On<TradeType>(() => ttypeAlias.TradeTypeName)...
    
    // here we expect one argument, and naming his lo-dash - is convention to say
    // it won't be used, it is there just to fulfill all the rules
    Restrictions.On<TradeType>(_ => ttypeAlias.TradeTypeName)...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 2012-10-13
      • 2016-01-30
      相关资源
      最近更新 更多