IQueryable IQueryProvider.CreateQuery(Expression expression) { Type et = TypeSystem.GetIEnumerableElementType(expression.Type); Type qt = typeof(ODataServiceInterceptedQuery <>).MakeGenericType(et); object[] args = new object[] { this, expression }; ConstructorInfo ci = qt.GetConstructor( BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(ODataServiceInterceptedQueryProvider), typeof(Expression) }, null); return((IQueryable)ci.Invoke(args)); }
internal static void AddResourcePropertyFromInstancePropertyInfo(this ResourceType resourceType, PropertyInfo property) { var resourcePropertyType = ResourceType.GetPrimitiveResourceType(property.PropertyType); var innerEnumerableType = TypeSystem.GetIEnumerableElementType(property.PropertyType); var innerResourcePropertyType = null != innerEnumerableType?ResourceType.GetPrimitiveResourceType(innerEnumerableType) : null; resourcePropertyType = null == resourcePropertyType && null != innerResourcePropertyType?ResourceType.GetCollectionResourceType(innerResourcePropertyType) : resourcePropertyType; if (null == resourcePropertyType) { return; } var resourcePropertyKind = null == innerResourcePropertyType ? ResourcePropertyKind.Primitive : ResourcePropertyKind.Collection; var resourceProperty = new ResourceProperty( property.Name, resourcePropertyKind, resourcePropertyType); resourceProperty.CanReflectOnInstanceTypeProperty = false; resourceProperty.GetAnnotation().InstanceProperty = property; resourceType.AddProperty(resourceProperty); }