В 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);