return self == typeof (Expression) || self.IsSubclassOf (typeof (Expression));
}
- public static bool IsGenericImplementationOf (this Type self, Type type)
+ public static bool IsGenericImplementationOf (this Type self, Type type, out Type generic_iface)
{
- foreach (Type iface in self.GetInterfaces ())
- if (iface.IsGenericInstanceOf (type))
- return true;
+ foreach (var iface in self.GetInterfaces ()) {
+ if (!iface.IsGenericInstanceOf (type))
+ continue;
+
+ generic_iface = iface;
+ return true;
+ }
+
+ generic_iface = null;
return false;
}
if (queryable != null)
return queryable;
- var type = source.GetType ();
-
- if (!type.IsGenericImplementationOf (typeof (IEnumerable<>)))
+ Type ienumerable;
+ if (!source.GetType ().IsGenericImplementationOf (typeof (IEnumerable<>), out ienumerable))
throw new ArgumentException ("source is not IEnumerable<>");
return (IQueryable) Activator.CreateInstance (
- typeof (QueryableEnumerable<>).MakeGenericType (type.GetFirstGenericArgument ()), source);
+ typeof (QueryableEnumerable<>).MakeGenericType (ienumerable.GetFirstGenericArgument ()), source);
}
#endregion