using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace SqlSugar { /// /// AppendSelect /// public partial class JsonQueryableProvider : IJsonQueryableProvider { private bool AppendSelect(JToken item) { bool isSelect = true; if (item.Type == JTokenType.Property) { var value = item.First().ToString(); var obj = context.Utilities.JsonToSelectModels(value); obj =FilterSelect(obj); sugarQueryable.Select(obj); } else { var obj = context.Utilities.JsonToSelectModels(item.ToString()); obj = FilterSelect(obj); sugarQueryable.Select(obj); } return isSelect; } private List FilterSelect(List obj) { if (!this.jsonTableConfigs.Any()) { return obj; } List result = new List(); foreach (var item in obj) { if (item.FieldName is string) { var tableName = GetTableName(item.FieldName + ""); var columnName = GetColumnName(item.FieldName + ""); if (IsMyColums(tableName, columnName)) { result.Add(item); } } else { result.Add(item); } } return result; } private bool IsMyColums(string tableName, string columnName) { return this.jsonTableConfigs.Any(it => it.TableName.EqualCase(tableName) && it.Columns.Any(z => z.Name.EqualCase(columnName))); } private string GetColumnName(string filedName) { return filedName.Split('.').Last(); } private string GetTableName(string filedName) { if (!filedName.Contains(".")) { return TableInfos.First(it => it.IsMaster).Table; } else { var shortName=filedName.Split('.').First(); return TableInfos.First(it => it.ShortName==shortName ).Table; } } } }