我有一个查询由QueryOver:NHibernate的QueryOver由枚举标志
public IList<Person> SearchTest(PersonEnumType type)
{
var q = SessionInstance.QueryOver<Person>();
q = q.Where(x => (x.PersonEnumType & type) == type);
return q.List<Person>();
}
和PersonEnumType
是一个枚举标志:
[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) – 2012-02-21 16:42:35