/// <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); }
/// <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); }
/// <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)); }