StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TAccumulate)),
source.Expression,
- Expression.Constant (seed),
+ Expression.Constant (seed, typeof (TAccumulate)),
Expression.Quote (func)));
}
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TAccumulate), typeof (TResult)),
source.Expression,
- Expression.Constant (seed),
+ Expression.Constant (seed, typeof (TAccumulate)),
Expression.Quote (func),
Expression.Quote (selector)));
}
public static IQueryable<TElement> AsQueryable<TElement> (this IEnumerable<TElement> source)
{
+ if (source == null)
+ throw new ArgumentNullException ("source");
+
var queryable = source as IQueryable<TElement>;
if (queryable != null)
return queryable;
- return new QueryableEnumerable<TElement> (
- new ConstantExpression (source, typeof (IQueryable<TElement>)));
+ return new QueryableEnumerable<TElement> (source);
}
- [MonoTODO]
public static IQueryable AsQueryable (this IEnumerable source)
{
+ if (source == null)
+ throw new ArgumentNullException ("source");
+
var queryable = source as IQueryable;
if (queryable != null)
return queryable;
- throw new NotImplementedException ();
+ Type ienumerable;
+ if (!source.GetType ().IsGenericImplementationOf (typeof (IEnumerable<>), out ienumerable))
+ throw new ArgumentException ("source is not IEnumerable<>");
+
+ return (IQueryable) Activator.CreateInstance (
+ typeof (QueryableEnumerable<>).MakeGenericType (ienumerable.GetFirstGenericArgument ()), source);
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source.Expression,
- Expression.Constant (item)));
+ Expression.Constant (item, typeof (TSource))));
}
public static bool Contains<TSource> (this IQueryable<TSource> source, TSource item, IEqualityComparer<TSource> comparer)
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source.Expression,
- Expression.Constant (item),
- Expression.Constant (comparer)));
+ Expression.Constant (item, typeof (TSource)),
+ Expression.Constant (comparer, typeof (IEqualityComparer<TSource>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source.Expression,
- Expression.Constant (defaultValue)));
+ Expression.Constant (defaultValue, typeof (TSource))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source.Expression,
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IEqualityComparer<TSource>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>))));
}
public static IQueryable<TSource> Except<TSource> (this IQueryable<TSource> source1, IEnumerable<TSource> source2, IEqualityComparer<TSource> comparer)
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2),
- Expression.Constant (comparer)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>)),
+ Expression.Constant (comparer, typeof (IEqualityComparer<TSource>))));
}
#endregion
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TKey)),
source.Expression,
Expression.Quote (keySelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IEqualityComparer<TKey>))));
}
public static IQueryable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement> (this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, Expression<Func<TSource, TElement>> elementSelector)
{
source.Expression,
Expression.Quote (keySelector),
Expression.Quote (elementSelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IEqualityComparer<TKey>))));
}
public static IQueryable<TResult> GroupBy<TSource, TKey, TElement, TResult> (this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, Expression<Func<TSource, TElement>> elementSelector, Expression<Func<TKey, IEnumerable<TElement>, TResult>> resultSelector)
{
source.Expression,
Expression.Quote (keySelector),
Expression.Quote (resultSelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IEqualityComparer<TKey>))));
}
public static IQueryable<TResult> GroupBy<TSource, TKey, TElement, TResult> (this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, Expression<Func<TSource, TElement>> elementSelector, Expression<Func<TKey, IEnumerable<TElement>, TResult>> resultSelector, IEqualityComparer<TKey> comparer)
{
Expression.Quote (keySelector),
Expression.Quote (elementSelector),
Expression.Quote (resultSelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IEqualityComparer<TKey>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TOuter), typeof (TInner), typeof (TKey), typeof (TResult)),
outer.Expression,
- Expression.Constant (inner),
+ Expression.Constant (inner, typeof (IEnumerable<TInner>)),
Expression.Quote (outerKeySelector),
Expression.Quote (innerKeySelector),
Expression.Quote (resultSelector)));
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TOuter), typeof (TInner), typeof (TKey), typeof (TResult)),
outer.Expression,
- Expression.Constant (inner),
+ Expression.Constant (inner, typeof (IEnumerable<TInner>)),
Expression.Quote (outerKeySelector),
Expression.Quote (innerKeySelector),
Expression.Quote (resultSelector),
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>))));
}
public static IQueryable<TSource> Intersect<TSource> (this IQueryable<TSource> source1, IEnumerable<TSource> source2, IEqualityComparer<TSource> comparer)
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2),
- Expression.Constant (comparer)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>)),
+ Expression.Constant (comparer, typeof (IEqualityComparer<TSource>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TOuter), typeof (TInner), typeof (TKey), typeof (TResult)),
outer.Expression,
- Expression.Constant (inner),
+ Expression.Constant (inner, typeof (IEnumerable<TInner>)),
Expression.Quote (outerKeySelector),
Expression.Quote (innerKeySelector),
Expression.Quote (resultSelector)));
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TOuter), typeof (TInner), typeof (TKey), typeof (TResult)),
outer.Expression,
- Expression.Constant (inner),
+ Expression.Constant (inner, typeof (IEnumerable<TInner>)),
Expression.Quote (outerKeySelector),
Expression.Quote (innerKeySelector),
Expression.Quote (resultSelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IEqualityComparer<TKey>))));
}
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TKey)),
source.Expression,
Expression.Quote (keySelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IComparer<TKey>))));
}
#endregion
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TKey)),
source.Expression,
Expression.Quote (keySelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IComparer<TKey>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>))));
}
public static bool SequenceEqual<TSource> (this IQueryable<TSource> source1, IEnumerable<TSource> source2, IEqualityComparer<TSource> comparer)
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2),
- Expression.Constant (comparer)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>)),
+ Expression.Constant (comparer, typeof (IEqualityComparer<TSource>))));
}
#endregion
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TKey)),
source.Expression,
Expression.Quote (keySelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IComparer<TKey>))));
}
#endregion
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource), typeof (TKey)),
source.Expression,
Expression.Quote (keySelector),
- Expression.Constant (comparer)));
+ Expression.Constant (comparer, typeof (IComparer<TKey>))));
}
#endregion
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>))));
}
public static IQueryable<TSource> Union<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2, IEqualityComparer<TSource> comparer)
StaticCall (
MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TSource)),
source1.Expression,
- Expression.Constant (source2),
- Expression.Constant (comparer)));
+ Expression.Constant (source2, typeof (IEnumerable<TSource>)),
+ Expression.Constant (comparer, typeof (IEqualityComparer<TSource>))));
}
#endregion
+#if NET_4_0 || MOONLIGHT || MOBILE
+ #region Zip
+
+ public static IQueryable<TResult> Zip<TFirst, TSecond, TResult> (this IQueryable<TFirst> source1, IEnumerable<TSecond> source2, Expression<Func<TFirst, TSecond, TResult>> resultSelector)
+ {
+ Check.Source1AndSource2 (source1, source2);
+ if (resultSelector == null)
+ throw new ArgumentNullException ("resultSelector");
+
+ return source1.Provider.CreateQuery<TResult> (
+ StaticCall (
+ MakeGeneric (MethodBase.GetCurrentMethod (), typeof (TFirst), typeof (TSecond), typeof (TResult)),
+ source1.Expression,
+ Expression.Quote (resultSelector)));
+ }
+
+ #endregion
+#endif
}
}