EF Core OrderBy 其他 Table 上的引用计数

EF Core OrderBy Count of References on other Table

我有一个 table 作者和一个 table 书籍。

public class Author
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Book
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Author Author { get; set; }
}

我想按我的作者拥有的书籍数量排序。 我需要通过 _context.Authors.XXX 访问数据,因为我在 IQueryable.

上应用了额外的过滤

我正在使用 net5.0 和 ef core 5.0。

有'elegant'方法吗?

谢谢!

您需要更新您的作者和图书 class。 作者 class 需要包含一个导航“书籍”属性,它将保存作者的书籍列表,而书籍 class 将保存一个 AuthorId 属性,它将作为作者 table.

的外键
public class Book
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string AuthorID {get; set; }
    public virtual Author Author { get; set; }
}

public class Author
{
    public Author() {
       this.Books = new List<Book>();
    }
    
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Book> Books { get; set; }
}

添加一个 Books 导航 属性 并相应地映射,名称如下:

public ICollection<Book> Books { get; set; }

然后在您的查询中:

_context.Authors.OrderByDescending(x => x.Books.Count());