2015-12-18 4 views
1

Я пытаюсь сделать запрос гдеsomeProperty.contains(string) || otherProperty.contains(string) так я нашел следующее:NHibernate, где ограничения с псевдонимом

.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 

как я включить этот псевдоним?

ответ

2

Это синтаксис .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)... 
Смежные вопросы