В настоящее время у меня есть следующий код:Можно ли реорганизовать этот запрос nHibernate Linq?
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
....
}
Как вы можете видеть, что запрос является то же самое каждый раз, когда для условия publicationType исключением. Я попытался реорганизовать это, создав метод, который принимает 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.
Есть ли другой способ сделать это?
Удивительный спасибо. Я сделал свой пример слишком простым, и, как вы указали, я могу просто передать тип публикации прямо в запрос. Но обобщение, которое вы отправили после этого, было именно тем, чем я был. – Zac