Имею такие таблицы созданые через EF
Первая и последняя таблицы имеют классы
public class Work
{
public Work()
{
Tags = new HashSet<WorkTag>();
}
[Key]
public int WorkID { get; set; }
[Required]
[StringLength(50, MinimumLength = 5, ErrorMessage = "The length of the string must be 5 to 50 characters")]
public string Title { get; set; }
[Required(ErrorMessage = "Please add the image!")]
[Display(Name = "Main image")]
public byte[] MainImage { get; set; }
public List<Image> Images { get; set; }
[Required]
public string Content { get; set; }
[Required]
[Display(Name = "Install instruction")]
public string InstallInstruction { get; set; }
public virtual ICollection<WorkTag> Tags { get; set; }
}
public class WorkTag
{
public WorkTag()
{
Works = new HashSet<Work>();
}
[Key]
public int TagID { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Work> Works { get; set; }
}
Связывающая таблица создается автоматически, но проблема в том что мне нужно работать с ней.
Задача состоит в том, чтобы погруппировать WorkTagWorks по TagId и вывести только 5 самых частых записей.
Так как в таблице WorkTags все значения в колонке TagID уникальны, то и коллекцию WorkTags можно считать сгруппированной выборкой по WorkTagWorks. Таким образом, остается лишь посчитать сколько Works связано с конкретным WorkTag и выбрать те из них, у который больше всего Works.
context.WorkTags.Select(t => new {
TagId = t.TagId,
TagName = t.Name,
WorksCount = t.Works.Count()
}).OrderByDescending(t => t.WorksCount)
.Take(5);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей