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>
}