I have what is a common scenario (at least for me) that involves
filtering based on a collection of enums.  I need to do this
dynamically, so I want to use ICriteria or QueryOver, but I just can't
figure out how to do it.

I have trimmed down my actual artifacts to outline the issue as simply
as I can.  See the following tables CREATEs, ENUM, POCO, HBM and DAO
function that works, but uses HQL.  Of course, if that is all I needed
I would be fine with HQL, but I need ICriteria.

CREATE TABLE [dbo].[Employee](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [LastName] [varchar](50) NOT NULL
)

CREATE TABLE [dbo].[EmployeeRole](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [EmployeeID] [int] NOT NULL,
        [RoleID] [int] NOT NULL
 )

public enum RoleType
{
        ActiveEmployee = 1,
        Admin = 2,
        Other = 3
}

public class Employee
{
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<RoleType> Roles { get; set; }
}

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MyDomain" namespace="MyDomain">
  <class name="MyDomain.Employee,MyDomain" table="Employee"
lazy="true">
    <id name="ID" column="ID" type="Int32" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="Name" column="Name" type="string" length="150"
not-null="true" />
    <bag name="Roles" table="EmployeeRole" inverse="false">
      <key column="EmployeeID" />
      <element column="RoleID" type="MyDomain.RoleType, MyDomain" />
    </bag>
  </class>
</hibernate-mapping>

public IList<Employee> GetActiveEmployees()
{
        var employees = base.GetSession()
                .CreateQuery("from Employee e where :role in elements(e.Roles)")
                .SetEnum("role", RoleIDEnum.ActiveMember);

        return employees.List<Employee>();
}

How can I recode the GetActiveEmployees method to use ICiteria instead
of HQL?

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to