IQueryable OfType where T is a runtime Type

后端 未结 7 614
旧巷少年郎
旧巷少年郎 2020-12-14 01:52

I need to be able to get something similar to the following to work:

Type type = ??? // something decided at runtime with .GetType or typeof;
object[] entity         


        
7条回答
  •  遥遥无期
    2020-12-14 02:41

    A solution to handle multiple types is

            public static IQueryable OfTypes(this DbSet query, IEnumerable types )  where TEntity : class
                {
                        if( types.Count() == 0 ) return query;
    
                        var lambda = GetOfOnlyTypesPredicate( typeof(TEntity), types.ToArray() );
                        return query.OfType().Where( lambda as Expression>);
    
                }
    
    
                public static LambdaExpression GetOfOnlyTypesPredicate( Type baseType, Type[] allowed )
                {
                        ParameterExpression param = Expression.Parameter( baseType, "typeonlyParam" );
                        Expression merged = Expression.TypeIs( param, allowed[0] );
                        for( int i = 1; i < allowed.Length; i++ )
                                merged = Expression.OrElse( merged, Expression.TypeIs( param, allowed[i] ));
                        return Expression.Lambda( merged, param );
    

提交回复
热议问题