| | |
| | | 锘縰sing System; |
| | | 锘縰sing SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_Core.Utilities; |
| | | |
| | | namespace WIDESEA_Core |
| | | { |
| | |
| | | /// 鏌ヨ鏉′欢 |
| | | /// </summary> |
| | | public List<SearchParameters> Filter { get; set; } |
| | | |
| | | public string ValidatePageOptions(PropertyInfo[] entityProperties) |
| | | { |
| | | string where = string.Empty; |
| | | List<SearchParameters> searchParametersList = new List<SearchParameters>(); |
| | | if (this.Filter != null && this.Filter.Count > 0) |
| | | { |
| | | searchParametersList.AddRange(Filter); |
| | | } |
| | | else if (!string.IsNullOrEmpty(Wheres)) |
| | | { |
| | | try |
| | | { |
| | | searchParametersList = Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | Filter = searchParametersList; |
| | | } |
| | | catch { } |
| | | } |
| | | for (int i = 0; i < searchParametersList.Count; i++) |
| | | { |
| | | if (string.IsNullOrEmpty(searchParametersList[i].Value)) |
| | | { |
| | | continue; |
| | | } |
| | | PropertyInfo? property = entityProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault(); |
| | | |
| | | if (property == null) continue; |
| | | |
| | | List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList(); |
| | | if (results == null || results.Count() == 0) |
| | | { |
| | | continue; |
| | | } |
| | | for (int j = 0; j < results.Count(); j++) |
| | | { |
| | | if (j == 0) |
| | | { |
| | | where += "("; |
| | | } |
| | | if (searchParametersList[i].Name == "column") |
| | | { |
| | | searchParametersList[i].Name = '"' + searchParametersList[i].Name + '"'; |
| | | } |
| | | LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition(); |
| | | if (expressionType == LinqExpressionType.Equal) |
| | | { |
| | | where += $"{searchParametersList[i].Name} = '{results[j].Item3}'"; |
| | | } |
| | | else if (expressionType == LinqExpressionType.Contains) |
| | | { |
| | | where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '%{results[j].Item3}%'"; |
| | | } |
| | | else |
| | | { |
| | | where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{results[j].Item3}'"; |
| | | } |
| | | |
| | | if (j == results.Count() - 1) |
| | | { |
| | | where += ")"; |
| | | } |
| | | else |
| | | { |
| | | where += " or "; |
| | | } |
| | | } |
| | | if (i < searchParametersList.Count - 1) |
| | | where += " and "; |
| | | } |
| | | return where; |
| | | } |
| | | |
| | | |
| | | public Dictionary<string, OrderByType> GetPageDataSort(PropertyInfo[] propertyInfo) |
| | | { |
| | | if (!string.IsNullOrEmpty(Sort)) |
| | | { |
| | | if (Sort.Contains(",")) |
| | | { |
| | | List<string> sortArr = Sort.Split(",").Where(x => propertyInfo.Any(p => p.Name == x)).ToList(); |
| | | Dictionary<string, OrderByType> sortDic = new Dictionary<string, OrderByType>(); |
| | | foreach (var item in sortArr) |
| | | { |
| | | sortDic[item] = Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc; |
| | | } |
| | | return sortDic; |
| | | } |
| | | else if (propertyInfo.Any(x => x.Name == Sort.FirstLetterToLower() || x.Name == Sort.FirstLetterToUpper())) |
| | | { |
| | | return new Dictionary<string, OrderByType> { |
| | | { |
| | | Sort,Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc |
| | | } }; |
| | | } |
| | | } |
| | | return new Dictionary<string, OrderByType> { { "CreateDate", Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc } }; |
| | | } |
| | | } |
| | | public class SearchParameters |
| | | { |