Фильтр FluentNHibernate с параметризованным предложением IN

В Fluent NHibernate можно ли добавить параметр к фильтру типа List , чтобы условие фильтра генерировало WHERE SomeColumn IN (@x, @y, @z) ?

Мой вариант использования - получить счет и подмножество его строк с учетом идентификатора счета и списка номеров строк счета. Я хочу получить строки в том же цикле, что и счет. Я предполагаю, что это делается примерно так, но я не могу найти правильное объявление типа для типа параметра:

Объекты домена:

public class Invoice {
  public int Id {get;set;}
  public List<InvoiceLine> Lines {get;set;}
}

public class InvoiceLine {
  public int Id {get;set}
  public int LineNumber {get;set;}
}

Сопоставления:

public class InvoiceMap : ClassMap<Invoice> {
  public InvoiceMap() {
    Id(x => x.Id);
    HasMany(x => x.Lines).ApplyFilter<OnlyLinesWithNumbersFilter>();
  }
}

public class InvoiceLineMap : ClassMap<InvoiceLine> {
  public InvoiceLineMap() {
    Id(x => x.Id);
    Map(x => x.LineNumber);
  }
}

Определение фильтра:

public class OnlyLinesWithNumbersFilter : FilterDefinition
{
    public OnlyLinesWithNumbersFilter()
    {
        WithName("OnlyLinesWithNumbers");
        WithCondition("LineNumber IN (:LineNumbers)");
        AddParameter("LineNumbers",?? What to put here ??);
    }
}

Запрос:

var filterName = "OnlyLinesWithNumbers";
session.EnableFilter(filterName).SetParameterList("LineNumbers", new[] {1,2,3});

var query = session.QueryOver<Invoice>()
       .Where(i => i.Id == 42)
       .Fetch(i => i.Lines).Eager
       .TransformUsing(new DistinctRootEntityResultTransformer());

var result = query.SingleOrDefault();
session.DisableFilter(filterName);
7
задан Jonas Høgh 14 July 2011 в 07:37
поделиться