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 { /// /// 排序栏位 /// public string FieldName { get; set; } /// /// 排序 0:顺序;1:倒序 /// public int Sort { get; set; } } public class FieldCondition { /// /// 字段名称 /// public string FieldName { get; set; } /// /// 值 /// public string Value { get; set; } /// /// 值类型 /// public string ValueType { get; set; } /// /// /// 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 OrderConditions(this IQueryable query, IList 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>(propertySelector, parameter); if (orderinfo.Sort == 1) query = query.OrderByDescending(orderby); else query = query.OrderBy(orderby); } return query; } public static IQueryable Pager(this IQueryable query, int pageindex, int pagesize, out int itemCount) { itemCount = query.Count(); return query.Skip((pageindex - 1) * pagesize).Take(pagesize); } } }