Created
August 19, 2017 07:55
-
-
Save masaedw/95ab972f8181de6bbe48a20ffe9be113 to your computer and use it in GitHub Desktop.
TestDbAsyncQueryProvider fixed to use with AutoMapper's ProjectTo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// TestDbAsyncQueryProvider from https://msdn.microsoft.com/en-us/library/dn314429(v=vs.113).aspx | |
internal class TestDbAsyncQueryProvider<TEntity> : IDbAsyncQueryProvider | |
{ | |
private readonly IQueryProvider _inner; | |
internal TestDbAsyncQueryProvider(IQueryProvider inner) | |
{ | |
_inner = inner; | |
} | |
public IQueryable CreateQuery(Expression expression) | |
{ | |
switch (expression) | |
{ | |
case MethodCallExpression m: | |
{ | |
var resultType = m.Method.ReturnType; // it shoud be IQueryable<T> | |
var tElement = resultType.GetGenericArguments()[0]; | |
var queryType = typeof(TestDbAsyncEnumerable<>).MakeGenericType(tElement); | |
return (IQueryable)Activator.CreateInstance(queryType, expression); | |
} | |
} | |
return new TestDbAsyncEnumerable<TEntity>(expression); | |
} | |
public IQueryable<TElement> CreateQuery<TElement>(Expression expression) | |
{ | |
return new TestDbAsyncEnumerable<TElement>(expression); | |
} | |
public object Execute(Expression expression) | |
{ | |
return _inner.Execute(expression); | |
} | |
public TResult Execute<TResult>(Expression expression) | |
{ | |
return _inner.Execute<TResult>(expression); | |
} | |
public Task<object> ExecuteAsync(Expression expression, CancellationToken cancellationToken) | |
{ | |
return Task.FromResult(Execute(expression)); | |
} | |
public Task<TResult> ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken) | |
{ | |
return Task.FromResult(Execute<TResult>(expression)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment