Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class DbSetExtensionMethods
- {
- private static readonly Type EnumerableType = typeof(Enumerable);
- private static readonly Type IEnumerableGenericType = typeof(IEnumerable<>);
- private const string SingleOrDefaultMethodName = "SingleOrDefault";
- public static TEntity Find<TEntity>(this DbSet<TEntity> dbSet, Func<TEntity, bool> predicate)
- where TEntity : class
- {
- Type entityType = typeof(TEntity);
- ParameterExpression dbSetParameter = Expression.Parameter(IEnumerableGenericType.MakeGenericType(entityType),
- nameof(dbSet));
- ParameterExpression filterParamater = Expression.Parameter(predicate.GetType(),
- nameof(predicate));
- Type[] typeArguments = new Type[] { entityType };
- Expression[] methodArguments = new Expression[] { dbSetParameter, filterParamater };
- MethodCallExpression singleOrDefaultCall = Expression.Call(EnumerableType,
- SingleOrDefaultMethodName,
- typeArguments,
- methodArguments);
- Func<DbSet<TEntity>, Func<TEntity, bool>, TEntity> compiledSingleOrDefaultCall =
- Expression.Lambda<Func<DbSet<TEntity>, Func<TEntity, bool>, TEntity>>(singleOrDefaultCall,
- dbSetParameter,
- filterParamater).Compile();
- return compiledSingleOrDefaultCall(dbSet, predicate);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement