Example #1
0
        /// <summary>
        /// Get the first or default item using a predicate, order items, load related object using navigationProperties
        /// </summary>
        /// <param name="predicate"></param>
        /// <param name="orderby"></param>
        /// <param name="navigationProperties"></param>
        /// <returns></returns>
        public T FirstOrDefault(Expression <Func <T, bool> > predicate, IGenericDataOrder <T> orderby, params Expression <Func <T, object> >[] navigationProperties)
        {
            T ret = null;

            using (var context = (DbContext)Activator.CreateInstance(ContextType, ContextParameters))
            {
                IQueryable <T> dbQuery = context.Set <T>();
                //apply eager loading
                foreach (Expression <Func <T, object> > navigationProperty in navigationProperties)
                {
                    dbQuery = dbQuery.Include <T, object>(navigationProperty);
                }

                //set the predicate
                if (predicate != null)
                {
                    dbQuery = dbQuery.AsNoTracking().Where(predicate);
                }

                if (orderby != null)
                {
                    //apply order
                    IOrderedQueryable <T> dbQueryOrdered = orderby.ApplyOrders(dbQuery);

                    ret = dbQueryOrdered.FirstOrDefault();
                }
                else
                {
                    ret = dbQuery.FirstOrDefault();
                }
            }
            return(ret);
        }
Example #2
0
        /// <summary>
        /// Get items using a predicate, order items and limit with an offset the selection, load related object using navigationProperties
        /// </summary>
        /// <param name="predicate"></param>
        /// <param name="orderby"></param>
        /// <param name="skip"></param>
        /// <param name="take"></param>
        /// <param name="navigationProperties"></param>
        /// <returns></returns>
        public virtual IList <T> List(Expression <Func <T, bool> > predicate, IGenericDataOrder <T> orderby, Nullable <int> skip, Nullable <int> take, params Expression <Func <T, object> >[] navigationProperties)
        {
            List <T> ret = new List <T>();

            using (var context = (DbContext)Activator.CreateInstance(ContextType, ContextParameters))
            {
                IQueryable <T> dbQuery = context.Set <T>();
                //apply eager loading
                foreach (Expression <Func <T, object> > navigationProperty in navigationProperties)
                {
                    dbQuery = dbQuery.Include <T, object>(navigationProperty);
                }

                //set the predicate
                if (predicate != null)
                {
                    dbQuery = dbQuery.AsNoTracking().Where(predicate);
                }

                if (orderby != null)
                {
                    //apply order
                    IOrderedQueryable <T> dbQueryOrdered = orderby.ApplyOrders(dbQuery);

                    //limits
                    if (skip == null && take == null)
                    {
                        ret = dbQueryOrdered.ToList <T>();
                    }
                    else if (skip != null && take != null)
                    {
                        ret = dbQueryOrdered.Skip((int)skip).Take((int)take).ToList <T>();
                    }
                    else if (skip != null && take == null)
                    {
                        ret = dbQueryOrdered.Skip((int)skip).ToList <T>();
                    }
                    else if (skip == null && take != null)
                    {
                        ret = dbQueryOrdered.Take((int)take).ToList <T>();
                    }
                }
                else
                {
                    //limits
                    if (take != null)
                    {
                        ret = dbQuery.Take((int)take).ToList <T>();
                    }
                    else
                    {
                        ret = dbQuery.ToList <T>();
                    }
                }
            }
            return(ret);
        }