public virtual IEnumerable <T> hasMany <T>(Expression <Func <T, bool> > predicate = null, bool withTrashed = false) where T : Model <T>, new() { //* Initialize target model var targetModel = DbFacade.DynamicModels[typeof(T).Name]; //* Get this table and that table name var thisTableName = TableName; var thatTableName = targetModel.PocoData.TableInfo.TableName; //* Guessing intermediate table name var intermediaTable = DbFacade.GenerateIntermediateTable(thisTableName, thatTableName); // Call the FindAll to return the result var results = targetModel.FindAll <T>( (lin) => lin.Select("*") .From(thisTableName) .Join(intermediaTable) .On(fnHasManyMyKey(PocoData.TableInfo), fnStdGenerateForeignKey(thisTableName, intermediaTable), "") .Join(thatTableName) .On(fnHasManyMyKey(targetModel.PocoData.TableInfo), fnStdGenerateForeignKey(thatTableName, intermediaTable), "") .Where(predicate)) as IEnumerable <T>; return(results); }