NHibernate用别名限制

时间:2015-12-18 00:30:03

标签: c# nhibernate queryover

我正在尝试查询其中 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

如何合并此别名?

1 个答案:

答案 0 :(得分:3)

这是上面使用的 .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)...
相关问题