protected List <Expression <Func <TEntity, bool> > > BuildWhereExpression <TEntity>(IViewModel viewModel, IList <string> where) { //将条件按照列组合起来 Dictionary <UiColumnInfo, List <Condition> > dictConditions = new Dictionary <UiColumnInfo, List <Condition> >(); foreach (var filter in where) { var ss = filter.Split(' '); if (ss.Length != 3) { continue; } var columnInfo = viewModel.GetColumnInfo(ss[0]); var condition = new Condition() { Key = ss[1], Value = ss[2] }; if (columnInfo != null) { if (dictConditions.ContainsKey(columnInfo)) { List <Condition> conditions = dictConditions[columnInfo]; conditions.Add(condition); } else { List <Condition> conditions = new List <Condition>(); conditions.Add(condition); dictConditions[columnInfo] = conditions; } } } List <Expression <Func <TEntity, bool> > > expressions = new List <Expression <Func <TEntity, bool> > >(); foreach (var columnCondition in dictConditions) { ParameterExpression parameterExpression = ExpressionHelper.BuildParameterExpression(typeof(TEntity)); UiColumnInfo columnInfo = columnCondition.Key; Expression <Func <TEntity, bool> > prediateExpression = BuildColumnConditionExpression(parameterExpression, typeof(TEntity), columnInfo, columnCondition.Value) as Expression <Func <TEntity, bool> >; if (prediateExpression != null) { expressions.Add(prediateExpression); } } return(expressions); }
public virtual UiColumnInfo CreateColumInfo(string propertyName, string jsonPropertyName = null) { UiColumnInfo columnInfo = null; if (string.IsNullOrEmpty(jsonPropertyName)) { columnInfo = new UiColumnInfo(propertyName); } else { columnInfo = new UiColumnInfo(propertyName, jsonPropertyName); } if (!_columnInfos.ContainsKey(columnInfo.Key)) { _columnInfos.Add(columnInfo.Key, columnInfo); } return(columnInfo); }
protected virtual Expression BuildColumnConditionExpression(ParameterExpression parameterExpression, Type entityType, UiColumnInfo columnInfo, List <Condition> conditions) { if (columnInfo == null) //|| columnInfo.Searchable == false) { return(null); } return(ExpressionHelper.BuildColumnConditionExpression(parameterExpression, entityType, columnInfo.PropertyName, columnInfo.PropertyValueType, columnInfo.SearchMode, columnInfo.FilterMode, conditions, false)); }
public virtual IViewModel AddViewModel([NotNull] Type clrType) { var viewModel = new ViewModel(); var attributes = (UiClassColumnAttribute[])Attribute.GetCustomAttributes(clrType, UiClassColumnAttributeType); foreach (var attr in attributes) { if (string.IsNullOrEmpty(attr.EntityPropertyName) || string.IsNullOrEmpty(attr.EntityPropertyValueType)) { continue; } UiColumnInfo columnInfo = viewModel.CreateColumInfo(attr.EntityPropertyName, attr.QueryKey); columnInfo.PropertyValueType = attr.EntityPropertyValueType; columnInfo.PropertyValue = attr.EntityPropertyValue; columnInfo.DefaultContent = attr.DefaultContent; columnInfo.DisplayName = attr.DisplayName; columnInfo.Visible = attr.Visible; columnInfo.Searchable = attr.Searchable; columnInfo.SearchMode = attr.SearchMode; columnInfo.Filterable = attr.Filterable; columnInfo.FilterMode = attr.FilterMode; columnInfo.ReferField = attr.ReferField; columnInfo.ReferCondition = attr.ReferCondition; columnInfo.ReferValueFormatMethod = attr.ReferValueFormatMethod; columnInfo.Orderable = false; columnInfo.Weight = attr.Weight; columnInfo.Width = attr.Weight; columnInfo.FormatMethod = attr.FormatMethod; columnInfo.OperationEvent = attr.OperationEvent; } foreach (var propertyInfo in clrType.GetProperties()) { UiColumnAttribute columnAttribute = (UiColumnAttribute)Attribute.GetCustomAttribute(propertyInfo, UiColumnAttributeType); JsonPropertyAttribute jsonPropertyAttribute = (JsonPropertyAttribute)Attribute.GetCustomAttribute(propertyInfo, JsonPropertyAttributeType); DisplayNameAttribute displayNameAttribute = (DisplayNameAttribute)Attribute.GetCustomAttribute(propertyInfo, DisplayNameAttributeType); UiColumnInfo columnInfo = viewModel.CreateColumInfo(columnAttribute?.EntityPropertyName ?? propertyInfo.Name, jsonPropertyAttribute?.PropertyName ?? propertyInfo.Name.ToCamelCase()); columnInfo.DefaultContent = columnAttribute?.DefaultContent; columnInfo.DisplayName = columnAttribute?.DisplayName ?? displayNameAttribute?.DisplayName; columnInfo.PropertyValueType = columnAttribute?.EntityPropertyValueType ?? Type.GetTypeCode(propertyInfo.PropertyType).ToString(); columnInfo.PropertyValue = columnAttribute?.EntityPropertyValue; columnInfo.Visible = columnAttribute != null ? columnAttribute.Visible : true; columnInfo.Orderable = columnAttribute != null ? columnAttribute.Orderable : false; columnInfo.Searchable = columnAttribute != null ? columnAttribute.Searchable : false; columnInfo.SearchMode = columnAttribute != null ? columnAttribute.SearchMode : SearchMode.Normal; columnInfo.Filterable = columnAttribute != null ? columnAttribute.Filterable : false; columnInfo.FilterMode = columnAttribute != null ? columnAttribute.FilterMode : FilterMode.And; columnInfo.ReferField = columnAttribute?.ReferField; columnInfo.ReferCondition = columnAttribute?.ReferCondition; columnInfo.ReferValueFormatMethod = columnAttribute?.ReferValueFormatMethod; columnInfo.Weight = columnAttribute != null ? columnAttribute.Weight : 0; columnInfo.Width = columnAttribute != null ? columnAttribute.Width : 0; columnInfo.FormatMethod = columnAttribute?.FormatMethod; columnInfo.OperationEvent = columnAttribute?.OperationEvent; } if (!_clrTypeMap.ContainsKey(clrType)) { _clrTypeMap[clrType] = viewModel; } return(viewModel); }