public Expression <Func <T, bool> > AsExpression <T>() where T : class { Extension.QueryCollection queryCollection = new Extension.QueryCollection(); var properties = typeof(T).GetTypeInfo().GetProperties(); foreach (var item in Columns) { var p = properties.FirstOrDefault(m => m.Name.Equals(item.Data, StringComparison.OrdinalIgnoreCase)); if (p == null) { continue; } var realType = Nullable.GetUnderlyingType(p.PropertyType) ?? p.PropertyType; string value = null; if (item.Search != null && item.Search.Value.IsNotNullAndWhiteSpace()) { value = item.Search.Value; } else if (Search != null && Search.Value.IsNotNullAndWhiteSpace() && realType == typeof(string)) { value = Search.Value; } if ((item.Search.Opeartor == Query.Operators.Range && item.Search.ValueMin.IsNullOrWhiteSpace() && item.Search.ValueMax.IsNullOrWhiteSpace()) || (item.Search.Opeartor != Query.Operators.Range && value.IsNullOrWhiteSpace())) { continue; } Query query = new Query(); query.Name = p.Name; try { query.Value = ClassAction.ValueConvert(p, value); query.ValueMin = ClassAction.ValueConvert(p, item.Search.ValueMin); query.ValueMax = ClassAction.ValueConvert(p, item.Search.ValueMax); if (query.ValueMax != null && query.ValueMax is DateTime) { query.ValueMax = ((DateTime)query.ValueMax).AddDays(1).AddMilliseconds(-1); } } catch { continue; } query.Operator = item.Search.Opeartor; queryCollection.Add(query); } return(queryCollection.AsExpression <T>(Query.Condition.AndAlso)); }
public virtual T CellConvert(T item, string header, Cell cell) { Type type = typeof(T); string propertyName = header; string value = ReadCellValue(cell); if (_viewConfigure != null) { var descriptor = _viewConfigure.GetViewPortDescriptors(true).FirstOrDefault(m => m.DisplayName == header); if (descriptor != null) { propertyName = descriptor.Name; var dropdown = descriptor as DropDownListDescriptor; if (dropdown != null) { foreach (var op in dropdown.OptionItems) { if (op.Value == value) { value = op.Key; } } } } } var property = _entryProperites.FirstOrDefault(m => m.Name == propertyName); if (property != null && value != null) { var convert = Converts.FirstOrDefault(m => m.SupportType == property.PropertyType); object convertedValue = null; if (convert != null) { convertedValue = convert.Convert(value); } else { convertedValue = ClassAction.ValueConvert(property, value); } property.SetValue(item, convertedValue); } return(item); }