В настоящее время у меня есть следующий код:
switch (publicationType)
{
case PublicationType.Book:
return Session.Query<Publication>()
.Where(p => p.PublicationType == PublicationType.Book)
.OrderByDescending(p => p.DateApproved)
.Take(10)
.Select(p => new PublicationViewModel
{
...
});
case PublicationType.Magazine:
return Session.Query<Publication>()
.Where(p => p.PublicationType == PublicationType.Magazine)
.OrderByDescending(p => p.DateApproved)
.Take(10)
.Select(p => new PublicationViewModel
{
...
});
case PublicationType.Newspaper
....
}
Как видите, запрос каждый раз один и тот же, за исключением условия публикации типа. Я попытался реорганизовать это путем создания метода, который принимает Func, например
private IEnumerable<PublicationViewModel> GetPublicationItems(Func<PublicationType, bool>> pubQuery)
{
return Session.Query<Publication>()
.Where(pubQuery)
.OrderByDescending(p => p.DateApproved)
.Take(10)
.Select(p => new PublicationViewModel
{
...
});
}
private bool IsBook(PublicationType publicationType)
{
return publicationType == PublicationType.Book;
}
, а затем вызывать этот метод как
GetPublicationItems(IsBook);
Но когда я делаю это, я получаю ошибку:
InvalidCastException: невозможно привести объект типа 'NHibernate.Hql.Ast.HqlParameter' к типу 'NHibernate.Hql.Ast.HqlBooleanExpression'.
Есть ли другой способ сделать это?