Nhibernate 3.0
Привет
Классический сценарий блога:
Когда я хочу показать только сообщения, содержащие определенный тег, я использую функцию Contains()
, например:
var tag = session.Query<Tag>().Single(x => x.Name == "C#");
var postsByTag = session.Query<Post>().Where(x => x.Tags.Contains(tag));
Это работает как шарм, а NHibernate генерирует правильный SQL.
Однако теперь мой пользователь хочет получить все сообщения, содержащие как минимум один из нескольких тегов. В итоге я сделал это так:
var tags = session.Query<Tag>().Where(x => x.Name.StartsWith("Nhibernate"));
var postsByTag = session.Query<Post>().Where(x => x.Tags.Any(t => tags.Contains(t)));
Работает как положено, postsByTag
содержит только сообщения, содержащие один из выбранных тегов. Моя проблема в этом заключается в том, что NHibernate, к сожалению, не знает, как перевести это на SQL, поэтому вместо использования WHERE IN
он просто получает все сообщения из базы данных и затем выполняет фильтрацию. Это огромная проблема для меня, потому что блог может содержать миллионы сообщений.
У кого-нибудь есть решение этой проблемы?
Заранее спасибо!