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