@"(\s+(asc|ascending|desc|descending))?\s*$", RegexOptions.IgnoreCase); // order operators internal static IQueryable AsQueryable(object o) { IQueryable oQueryable = o as IQueryable; if (oQueryable != null) { return(oQueryable); } // Wrap strings in IEnumerable<string> instead of treating as IEnumerable<char>. string oString = o as string; if (oString != null) { return(Queryable.AsQueryable(new string[] { oString })); } IEnumerable oEnumerable = o as IEnumerable; if (oEnumerable != null) { // IEnumerable<T> can be directly converted to an IQueryable<T>. Type genericType = FindGenericEnumerableType(o.GetType()); if (genericType != null) { // The non-generic Queryable.AsQueryable gets called for array types, executing // the FindGenericType logic again. Might want to investigate way to avoid this. return(Queryable.AsQueryable(oEnumerable)); } // Wrap non-generic IEnumerables in IEnumerable<object>. List <object> genericList = new List <object>(); foreach (object item in oEnumerable) { genericList.Add(item); } return(Queryable.AsQueryable(genericList)); } // Wrap non-IEnumerable types in IEnumerable<T>. Type listType = typeof(List <>).MakeGenericType(o.GetType()); IList list = (IList)DataSourceHelper.CreateObjectInstance(listType); list.Add(o); return(Queryable.AsQueryable(list)); }
protected virtual object CreateContext(Type contextType) { return(DataSourceHelper.CreateObjectInstance(contextType)); }