123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- using System.Threading.Tasks;
- namespace wispro.sp.utility
- {
- public class ConditionTreeNode
- {
- public ConditionTreeNode Right { get; set; }
- public ConditionTreeNode Left { get; set; }
- }
- public class OperateNode : ConditionTreeNode
- {
- public LogicEnum Operator { get; set; }
- }
- public class FieldConditionNode : ConditionTreeNode
- {
- public FieldCondition FieldCondition { get; set; }
- }
- public class OrderField {
- /// <summary>
- /// 排序栏位
- /// </summary>
- public string FieldName { get; set; }
- /// <summary>
- /// 排序 0:顺序;1:倒序
- /// </summary>
- public int Sort { get; set; }
- }
- public class FieldCondition
- {
- /// <summary>
- /// 字段名称
- /// </summary>
- public string FieldName { get; set; }
- /// <summary>
- /// 值
- /// </summary>
- public string Value { get; set; }
- /// <summary>
- /// 值类型
- /// </summary>
- public string ValueType { get; set; }
- /// <summary>
- ///
- /// </summary>
- public OperatorEnum Operator { get; set; }
- }
- public enum OperatorEnum
- {
- Contains,
- Equal,
- Greater,
- GreaterEqual,
- Less,
- LessEqual,
- NotEqual,
- In,
- Between,
- StartsWith,
- EndWith,
- NotContains
- }
- public enum LogicEnum
- {
- And,
- Or
- }
- public static class EFCoreExt
- {
- public static IQueryable<T> OrderConditions<T>(this IQueryable<T> query, IList<OrderField> orderConditions)
- {
- foreach (var orderinfo in orderConditions)
- {
- var t = typeof(T);
- var propertyInfo = t.GetProperty(orderinfo.FieldName);
- var parameter = Expression.Parameter(t);
- Expression propertySelector = Expression.Property(parameter, propertyInfo);
- var orderby = Expression.Lambda<Func<T, object>>(propertySelector, parameter);
- if (orderinfo.Sort == 1)
- query = query.OrderByDescending(orderby);
- else
- query = query.OrderBy(orderby);
- }
- return query;
- }
- public static IQueryable<T> Pager<T>(this IQueryable<T> query, int pageindex, int pagesize, out int itemCount)
- {
- itemCount = query.Count();
- return query.Skip((pageindex - 1) * pagesize).Take(pagesize);
- }
- }
- }
|