У меня есть таблицы Albums
и Images
с отношением "1-многие". Модели создаются автоматически с использованием подхода EF «сначала база данных».
Я хочу получить все альбомы с их изображениями и отображать только первое изображение из каждого альбома на странице списка альбомов. Но я запутался, ICollection
не имеет индексов, и я не могу преобразовать его в список изнутри.
Иногда говорят, что это Hashset
Album.cs
public partial class Album
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Album()
{
this.Images = new HashSet<Image>();
}
public int id { get; set; }
public string title { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Image> Images { get; set; }
}
Image.cs
public partial class Image
{
public int id { get; set; }
public int album_id { get; set; }
public string img { get; set; }
public string title { get; set; }
public virtual Album Album { get; set; }
}
HomeController.cs
ViewBag.Albums = db.Albums.Where(a => a.status == 1)
.Select(c => new
{
Album = c,
Image = c.Images.OrderBy(i => i.sort)
})
.AsEnumerable() // not execute yet
.Select(a => a.Album)
.OrderBy(a => a.sort)
.Take(6)
.ToList();
Просмотр. html
@if (ViewBag.Albums != null) {
foreach (var item in ViewBag.Albums)
{
<div class="album">
@{
string default_image = "no-img.png";
if (item.Images.Count > 0)
{
//var firstImg = item.Images.First();//this showing error that item.image dont have first()
//List<myproject.Models.Image> images = item.Images.ToList();//this also say hashset has no list()
//inside 1 albums many images can be returned, I want to display first one only.
default_image = item.id + "/" + item.Images[0].img;
}
int indx = 1;
}
</div>
}
}