У меня есть запрос на QueryOver:Nhibernate QueryOver по Enum Флаги
public IList<Person> SearchTest(PersonEnumType type)
{
var q = SessionInstance.QueryOver<Person>();
q = q.Where(x => (x.PersonEnumType & type) == type);
return q.List<Person>();
}
и PersonEnumType
является Enum флаги:
[Flags]
public enum PersonEnumType
{
Employee1 = 1,
Employee2 = 2,
Employee3 = 4
}
Это проливает Could not determine member from (Convert(x.PersonEnumType) & Convert(value(NHibernate.Repository.PersonRepositoryNh+<>c__DisplayClass2).type))
Конечно, это работает в NHibernate. Linq.
Почему?
Мое предположение заключается в том, что с Linq операция выполняется в памяти, поэтому она сначала загрузит всех лиц, а затем будет фильтровать x.PersonEnumType & type в памяти. Или, может быть, провайдер linq просто хорош. В любом случае [вы можете сделать это с помощью ICriteria] (http://stackoverflow.com/questions/1835392/hql-to-criteriaquery-when-using-bitwise-operators) –