I am new to MVC3, so apologies if this is basic, but I couldn’t work it out.
I have a view model that includes 3 tables, an ‘Albums’ table with 2 foreign keys (Artist ID and Label ID).
I have a ‘Labels’ controller and a Details method where I display the Label table fields. I am trying to get the distinct ‘Artists’ from the collection of Albums related to the Label.
At the moment, I can get the name of the artists, but one is generated for each album – I have included the code for this scenario below.
I have tried a bunch of different things, like including Artists in the collection and using the Distinct and group by functions, but to no avail. Not sure if it is doable this way, or whether, due to the indirect relationship between the tables, I need to use a different approach.
Any helps is much appreciated.
Controller:
public ActionResult Details(int id)
{
var viewModel = new LabelsDetailsVM();
viewModel.Lables = db.Labels
.Include(a => a.Albums)
.SingleOrDefault(x => x.LabelID == id);
return View(viewModel);
View:
@foreach (var artist in Model.Lables.Albums)
{
<tr>
<td>
@Html.DisplayFor(model => artist.Artist.ArtistName)
</td>
</tr>
}
View Model
public class LabelsDetailsVM
{
public Label Lables { get; set; }
public IEnumerable<Album> Albums { get; set; }
public IEnumerable<Artist> Artists { get; set; }
}
}
Here’s an example that might get you on the right track:
view model:
Controller:
and the equality comparer used to distinguish between 2 artists used in the controller that could of course be adapted to match your requirements. In this example it considers that 2 artists represent the same entity if they have the same ID. But you could work with some other properties such as the name and so on, all depends on what you need:
View: