Exemple #1
0
        /// <summary>
        /// Append entity identity condition to original IQuery object
        /// it will create new IQuery object if the original is null
        /// </summary>
        /// <typeparam name="T">Entity type</typeparam>
        /// <param name="datas">Datas</param>
        /// <param name="originalQuery">Original query</param>
        /// <param name="exclude">Exclude</param>
        /// <returns>Return the newest IQuery object</returns>
        public static IQuery AppendEntityIdentityCondition <T>(IEnumerable <T> datas, IQuery originalQuery = null, bool exclude = false) where T : BaseEntity <T>, new()
        {
            if (datas == null || !datas.Any())
            {
                return(originalQuery);
            }
            originalQuery = originalQuery ?? CreateByEntity <T>();
            var entityType = typeof(T);
            var keys       = EntityManager.GetPrimaryKeys(entityType);

            if (keys.IsNullOrEmpty())
            {
                throw new EZNEWException(string.Format("Type:{0} isn't set primary keys", entityType.FullName));
            }
            var     firstData    = datas.ElementAt(0).GetValue(keys.ElementAt(0));
            var     dataType     = firstData.GetType();
            dynamic keyValueList = Activator.CreateInstance(typeof(List <>).MakeGenericType(dataType));
            var     keyCount     = keys.GetCount();

            foreach (T entity in datas)
            {
                if (keyCount == 1)
                {
                    keyValueList.Add(entity.GetValue(keys.ElementAt(0)));
                }
                else
                {
                    IQuery entityQuery = Create();
                    foreach (var key in keys)
                    {
                        entityQuery = AndExtensions.And(entityQuery, key, exclude ? CriteriaOperator.NotEqual : CriteriaOperator.Equal, entity.GetValue(key));
                    }
                    originalQuery.Or(entityQuery);
                }
            }
            if (keyCount == 1)
            {
                if (exclude)
                {
                    originalQuery = NotInExtensions.NotIn(originalQuery, keys.ElementAt(0), keyValueList);
                }
                else
                {
                    originalQuery = InExtensions.In(originalQuery, keys.ElementAt(0), keyValueList);
                }
            }
            return(originalQuery);
        }
Exemple #2
0
        /// <summary>
        /// Append entity identity condition to original IQuery object
        /// it will create new IQuery object if the original is null
        /// </summary>
        /// <typeparam name="T">Entity type</typeparam>
        /// <param name="data">Data</param>
        /// <param name="originalQuery">Original query</param>
        /// <param name="exclude">Exclude</param>
        /// <returns>Return the newest IQuery object</returns>
        public static IQuery AppendEntityIdentityCondition <T>(T data, IQuery originalQuery = null, bool exclude = false) where T : BaseEntity <T>, new()
        {
            if (data == null)
            {
                return(originalQuery);
            }
            originalQuery ??= CreateByEntity <T>();
            Type entityType = typeof(T);
            var  keys       = EntityManager.GetPrimaryKeys(entityType);

            if (keys.IsNullOrEmpty())
            {
                throw new EZNEWException(string.Format("Type:{0} is not set primary keys", entityType.FullName));
            }
            foreach (var key in keys)
            {
                var criteriaOperator = exclude ? CriteriaOperator.NotEqual : CriteriaOperator.Equal;
                originalQuery = AndExtensions.And(originalQuery, key, criteriaOperator, data.GetValue(key), null);
            }
            return(originalQuery);
        }
Exemple #3
0
        /// <summary>
        /// Add a condition with 'or'
        /// </summary>
        /// <param name="sourceQuery">Source query</param>
        /// <param name="eachFieldConnectOperator">Each field connect operator</param>
        /// <param name="operator">Condition operator</param>
        /// <param name="value">Value</param>
        /// <param name="converter">Criteria converter</param>
        /// <param name="fieldNames">Fields</param>
        /// <returns>Return the newest IQuery object</returns>
        public static IQuery Or(this IQuery sourceQuery, QueryOperator eachFieldConnectOperator, CriteriaOperator @operator, dynamic value, ICriteriaConverter converter, params string[] fieldNames)
        {
            if (fieldNames.IsNullOrEmpty())
            {
                return(sourceQuery);
            }
            IQuery groupQuery = QueryManager.Create();

            foreach (string field in fieldNames)
            {
                switch (eachFieldConnectOperator)
                {
                case QueryOperator.AND:
                default:
                    groupQuery = AndExtensions.And(groupQuery, field, @operator, value, converter);
                    break;

                case QueryOperator.OR:
                    groupQuery = Or(groupQuery, field, @operator, value, converter);
                    break;
                }
            }
            return(groupQuery.AddQueryItem(QueryOperator.OR, groupQuery));
        }
 /// <summary>
 /// Greater than or equal condition
 /// </summary>
 /// <typeparam name="TQueryModel">Query model</typeparam>
 /// <param name="sourceQuery">Source query</param>
 /// <param name="field">Field</param>
 /// <param name="subquery">Subquery</param>
 /// <param name="or">Connect with 'and'(true/default) or 'or'(false)</param>
 /// <returns>Return the newest IQuery object</returns>
 public static IQuery GreaterThanOrEqual <TQueryModel>(this IQuery sourceQuery, Expression <Func <TQueryModel, dynamic> > field, IQuery subquery, bool or = false) where TQueryModel : IQueryModel <TQueryModel>
 {
     return(or ? OrExtensions.Or(sourceQuery, field, CriteriaOperator.GreaterThanOrEqual, subquery) : AndExtensions.And(sourceQuery, field, CriteriaOperator.GreaterThanOrEqual, subquery));
 }