C# 计算导航属性的出现次数

C# 计算导航属性的出现次数,c#,asp.net-mvc,entity-framework,linq,razor,C#,Asp.net Mvc,Entity Framework,Linq,Razor,如果我有以下两种型号: public class Book { public int ID { get; set; } public string Title { get; set; } //other properties public virtual Category Category { get; set; } } public class Category { public int ID { get; set; } public st

如果我有以下两种
型号

public class Book
{
    public int ID { get; set; }
    public string Title { get; set; }
    //other properties
    public virtual Category Category { get; set; }
}


public class Category
{ 
    public int ID { get; set; }
    public string CategoryName { get; set; }
    public virtual ICollection<Book> Books { get; set; }
}
如何查看本
列表中每个类别的类别名称和出现次数?
样本输出

  • 科学:2
  • 数学:4
匿名类型方式 如果您使用的是实体框架,则可以执行以下操作:

var list = db.Category.Select(c => 
new { 
    Name = c.CategoryName, 
    Count = c.Books.Count
}).ToList();
然后将其发送到您的视图,并在Razor中使用
@foreach
进行渲染

列出场景 如果您确实需要发送
列表
进行查看,您可以在视图中对书籍进行分组:

@{
    var list = Model.GroupBy(b => b.Category.CategoryName);
}
@foreach (var entry in list)
{
    <div>@entry.Key : @entry.Count()</div>
}
@{
var list=Model.GroupBy(b=>b.Category.CategoryName);
}
@foreach(列表中的var条目)
{
@entry.Key:@entry.Count()
}

我的问题的目的是通过发送
书籍
模型而不是类别来实现这一点。基本上,我打算这样做是因为我正在对书籍进行排序,因为它们被发送到
视图
但是,如果我发送
类别
模型,我将花费大量的工作来对其中的导航属性
书籍
进行排序,此外,我还可以发送
类别
模型,并将每个类别的计数视为
model.Books.count
,因为图书是类别中的
ICollection
。这也不会带来100%的成功
书籍
将在其
类别中进行分类
不是有效的分类我已编辑了我的答案以满足您的要求。下次请更准确;)。
@{
    var list = Model.GroupBy(b => b.Category.CategoryName);
}
@foreach (var entry in list)
{
    <div>@entry.Key : @entry.Count()</div>
}