Linq-to-Entities:从多对多关系聚合的有序列表

时间:2013-08-08 14:44:56

标签: group-by linq-to-entities many-to-many

Linq to Entities - 多对多问题:

我有一个Songs表和一个Tag表,其中包含一个多对多表。我想得到每个标签的歌曲数量(一个标签)并命令标签从最少使用开始。 SQL查询如下所示:

SELECT name, COUNT(name) AS TimesUsed 
FROM Tags INNER JOIN Song_Tag_Junc STJ ON Tags.ID = STJ.TagID
GROUP by name
ORDER BY COUNT(name)

实体歌曲和标签看起来像这样:

public class Song {
  public int ID { get; set; }
  public string Name { get; set; }
  public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag {
  public int ID { get; set; }
  public string Name { get; set; }
  public virtual ICollection<Song> Songs { get; set; }
}

知道如何在Linq to Entities中实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

所以我想我回答了自己的问题。

由于Tag实体引用了Song实体,我能够编写下面的代码来完成从最少使用到最常用的标签的排序:

var query = context.Tags.OrderBy(tag => tag.Songs.Count());

List<Tag> list = query.ToList();

简洁之美!

相关问题