111 lines
3.4 KiB
C#
111 lines
3.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq.Expressions;
|
|
|
|
namespace System.Linq
|
|
{
|
|
// Token: 0x02000045 RID: 69
|
|
internal class QueryableEnumerable<TElement> : IEnumerable, IOrderedQueryable, IQueryProvider, IQueryable, IQueryableEnumerable, IEnumerable<TElement>, IQueryableEnumerable<TElement>, IQueryable<TElement>, IOrderedQueryable<TElement>
|
|
{
|
|
// Token: 0x06000423 RID: 1059 RVA: 0x00013D5C File Offset: 0x00011F5C
|
|
public QueryableEnumerable(IEnumerable<TElement> enumerable)
|
|
{
|
|
this.expression = Expression.Constant(this);
|
|
this.enumerable = enumerable;
|
|
}
|
|
|
|
// Token: 0x06000424 RID: 1060 RVA: 0x00013D78 File Offset: 0x00011F78
|
|
public QueryableEnumerable(Expression expression)
|
|
{
|
|
this.expression = expression;
|
|
}
|
|
|
|
// Token: 0x06000425 RID: 1061 RVA: 0x00013D88 File Offset: 0x00011F88
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return this.GetEnumerator();
|
|
}
|
|
|
|
// Token: 0x17000043 RID: 67
|
|
// (get) Token: 0x06000426 RID: 1062 RVA: 0x00013D90 File Offset: 0x00011F90
|
|
public Type ElementType
|
|
{
|
|
get
|
|
{
|
|
return typeof(TElement);
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000044 RID: 68
|
|
// (get) Token: 0x06000427 RID: 1063 RVA: 0x00013D9C File Offset: 0x00011F9C
|
|
public Expression Expression
|
|
{
|
|
get
|
|
{
|
|
return this.expression;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000045 RID: 69
|
|
// (get) Token: 0x06000428 RID: 1064 RVA: 0x00013DA4 File Offset: 0x00011FA4
|
|
public IQueryProvider Provider
|
|
{
|
|
get
|
|
{
|
|
return this;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000429 RID: 1065 RVA: 0x00013DA8 File Offset: 0x00011FA8
|
|
public IEnumerable GetEnumerable()
|
|
{
|
|
return this.enumerable;
|
|
}
|
|
|
|
// Token: 0x0600042A RID: 1066 RVA: 0x00013DB0 File Offset: 0x00011FB0
|
|
public IEnumerator<TElement> GetEnumerator()
|
|
{
|
|
return this.Execute<IEnumerable<TElement>>(this.expression).GetEnumerator();
|
|
}
|
|
|
|
// Token: 0x0600042B RID: 1067 RVA: 0x00013DC4 File Offset: 0x00011FC4
|
|
public IQueryable CreateQuery(Expression expression)
|
|
{
|
|
return (IQueryable)Activator.CreateInstance(typeof(QueryableEnumerable<>).MakeGenericType(new Type[] { expression.Type.GetFirstGenericArgument() }), new object[] { expression });
|
|
}
|
|
|
|
// Token: 0x0600042C RID: 1068 RVA: 0x00013E08 File Offset: 0x00012008
|
|
public object Execute(Expression expression)
|
|
{
|
|
LambdaExpression lambdaExpression = Expression.Lambda(QueryableEnumerable<TElement>.TransformQueryable(expression), new ParameterExpression[0]);
|
|
return lambdaExpression.Compile().DynamicInvoke(new object[0]);
|
|
}
|
|
|
|
// Token: 0x0600042D RID: 1069 RVA: 0x00013E38 File Offset: 0x00012038
|
|
private static Expression TransformQueryable(Expression expression)
|
|
{
|
|
return new QueryableTransformer().Transform(expression);
|
|
}
|
|
|
|
// Token: 0x0600042E RID: 1070 RVA: 0x00013E48 File Offset: 0x00012048
|
|
public IQueryable<TElem> CreateQuery<TElem>(Expression expression)
|
|
{
|
|
return new QueryableEnumerable<TElem>(expression);
|
|
}
|
|
|
|
// Token: 0x0600042F RID: 1071 RVA: 0x00013E50 File Offset: 0x00012050
|
|
public TResult Execute<TResult>(Expression expression)
|
|
{
|
|
Expression<Func<TResult>> expression2 = Expression.Lambda<Func<TResult>>(QueryableEnumerable<TElement>.TransformQueryable(expression), new ParameterExpression[0]);
|
|
return expression2.Compile()();
|
|
}
|
|
|
|
// Token: 0x040000F0 RID: 240
|
|
private Expression expression;
|
|
|
|
// Token: 0x040000F1 RID: 241
|
|
private IEnumerable<TElement> enumerable;
|
|
}
|
|
}
|