asp.net mvc 3 - Razor skipping nested foreach loops -
in database have string of child tables. in razor view trying loop through ultimate parent , filter collection few levels down.
i have got work using following extract:
@foreach (var artist in model) { <tr> <td> @html.displayfor(modelitem => artist.artistname) </td> </tr> foreach (var album in artist.albums) { foreach (var song in album.songs) { if (song.songplays != null) { foreach (var songplay in song.songplays) { <tr> <td> @html.displayfor(a => songplay.playtime) </td> </tr> } } } } }
the issue cannot sort whole child collection playtime. solve tried working skipping out preceding foreach loops using:
foreach (var songplay in artist.albums.selectmany(a => a.songs.selectmany(b => b.songplays))) { <tr> <td> @html.displayfor(a => songplay.playtime) </td> </tr> }
this seems work without filter applied in controller action, returns null result when filter applied. have tried checking in view if result null, not work - like:
if (artist.albums.select(a => a.songs.select(b => b.songplays)) != null) { foreach (var songplay in artist.albums.selectmany(a => a.songs.selectmany(b => b.songplays))) { ...
i still null result, presuming null check not doing hoping do.
so if can give me guidance either on whether approach sensible , if can null check on grandchild collection somehow, or if there better approach, appreciated.
i'm not sure right. far understand need filter null items , second code sample in question ok in terms of orderting. in case, may add where
clause selection:
foreach (var songplay in artist.albums.selectmany(a => a.songs.where(b => b != null).selectmany(b => b.songplays))) { <tr> <td> @html.displayfor(a => songplay.playtime) </td> </tr> }
Comments
Post a Comment