public IQueryable<IEntity> GetFollowedItems( int entityTypeId, int personId )
{
EntityTypeCache itemEntityType = EntityTypeCache.Read( entityTypeId );
var rockContext = this.Context as RockContext;
var followedItemsQry = this.Queryable().Where( a => a.PersonAlias.PersonId == personId && a.EntityTypeId == entityTypeId );
if ( itemEntityType.AssemblyName != null )
{
Type entityType = itemEntityType.GetEntityType();
if ( entityType != null )
{
Type[] modelType = { entityType };
Type genericServiceType = typeof( Rock.Data.Service<> );
Type modelServiceType = genericServiceType.MakeGenericType( modelType );
Rock.Data.IService serviceInstance = Activator.CreateInstance( modelServiceType, new object[] { rockContext } ) as IService;
MethodInfo qryMethod = serviceInstance.GetType().GetMethod( "Queryable", new Type[] { } );
var entityQry = qryMethod.Invoke( serviceInstance, new object[] { } ) as IQueryable<IEntity>;
entityQry = followedItemsQry.Join(
entityQry,
f => f.EntityId,
e => e.Id,
( f, e ) => e );
return entityQry;
}
}
return null;
}