public IList<EmployeeLogView> GetEmployeeLog(SignInQuery query)
        {
            var criteria = Session.CreateCriteria<EmployeeLogView>();
            criteria.Add(Expression.Between("SignInDate", query.SignInDateStart.Value, query.SignInDateEnd.Value));
            if (query.LocationId.HasValue) criteria.CreateAlias("Location", "l").Add(Expression.Eq("l.Id", query.LocationId.Value));

            return criteria.List<EmployeeLogView>();
        }
        public IList<EmployeeLog> GetEmployeeLog(SignInQuery query)
        {
            var criteria = Session.CreateCriteria<EmployeeLog>();

            if (!string.IsNullOrEmpty(query.UserName)) criteria.CreateAlias("Employee", "e").Add(Expression.Like("e.Name", query.UserName + "%"));
            if (query.LocationId.HasValue) criteria.Add(Expression.Eq("LocationId", query.LocationId.Value));
            if (query.SignInDateStart.HasValue) criteria.Add(Expression.Ge("SignInDate", query.SignInDateStart.Value));
            if (query.SignInDateEnd.HasValue) criteria.Add(Expression.Le("SignInDate", query.SignInDateEnd.Value));
            criteria.Add(Expression.IsNull("SignOutDate"));

            if (string.IsNullOrEmpty(query.SortBy))
                criteria.AddOrder(new Order("Id", true));
            else
                criteria.AddOrder(new Order(query.SortBy, (query.SortDirection != null && query.SortDirection.Equals("asc", StringComparison.InvariantCultureIgnoreCase))));

            return criteria.List<EmployeeLog>();
        }