示例#1
0
 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));
 }
示例#2
0
        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);
        }