public static IQueryable <T> GetRefreshedEntityQuery <T>(this IDataServiceComponent dataService, IQueryable <T> entities, RefreshRequest info) where T : class { Utils.IDataHelper dataHelper = dataService.ServiceContainer.DataHelper; object[] keyValue = info.rowInfo.GetPKValues(dataHelper); return(FindEntityQuery(entities, info.rowInfo, keyValue)); }
public static IQueryable <T> PerformFilter <T>(this IDataServiceComponent dataService, IQueryable <T> entities, FilterInfo filter, DbSetInfo dbInfo) where T : class { Utils.IDataHelper dataHelper = dataService.ServiceContainer.DataHelper; IQueryable <T> result = entities; if (filter == null || filter.filterItems == null || filter.filterItems.Count == 0) { return(result); } int cnt = 0; StringBuilder sb = new StringBuilder(); LinkedList <object> filterParams = new LinkedList <object>(); foreach (FilterItem filterItem in filter.filterItems) { Field field = dbInfo.fieldInfos.Where(finf => finf.fieldName == filterItem.fieldName).FirstOrDefault(); if (field == null) { throw new DomainServiceException(string.Format(ErrorStrings.ERR_REC_FIELDNAME_INVALID, dbInfo.dbSetName, filterItem.fieldName)); } if (cnt > 0) { sb.Append(" and "); } switch (filterItem.kind) { case FilterType.Equals: if (filterItem.values.Count == 1) { sb.AppendFormat("{0}=@{1}", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); } else { string args = string.Join(",", filterItem.values.Select(v => string.Format("@{0}", cnt++))); sb.AppendFormat("({0} in ({1}))", filterItem.fieldName, args); foreach (string v in filterItem.values) { filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, v)); } } break; case FilterType.StartsWith: sb.AppendFormat("{0}.StartsWith(@{1})", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.EndsWith: sb.AppendFormat("{0}.EndsWith(@{1})", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.Contains: sb.AppendFormat("{0}.Contains(@{1})", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.Gt: sb.AppendFormat("{0}>@{1}", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.Lt: sb.AppendFormat("{0}<@{1}", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.GtEq: sb.AppendFormat("{0}>=@{1}", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.LtEq: sb.AppendFormat("{0}<=@{1}", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.NotEq: sb.AppendFormat("{0}!=@{1}", filterItem.fieldName, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); break; case FilterType.Between: sb.AppendFormat("({0}>=@{1} and {0}<=@{2})", filterItem.fieldName, cnt++, cnt++); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.FirstOrDefault())); filterParams.AddLast(dataHelper.DeserializeField(typeof(T), field, filterItem.values.LastOrDefault())); break; } } result = entities.Where(sb.ToString(), filterParams.ToArray()); return(result); }