在网页中,我希望能够以类别中的博客数返回BlogCategoryName。例如
blognamex(3)
Blognamey(4)
....
我正在使用实体框架,并拥有一个博客类别类
namespace emoCard.Domain.Entities
{
public class BlogCategory
{
public BlogCategory()
{
this.Blogs = new List<Blog>();
}
public int BlogCategoryID { get; set; }
public string BlogCategoryName { get; set; }
public string BlogCategoryDescription { get; set; }
public int BlogCategoryOrder { get; set; }
public List<Blog> Blogs { get; set; }
}
}
我可以沿着
的线设置一个ViewModelnamespace emoCard.WebUI.Models
{
public class BlogCategoryViewModel
{
public IEnumerable<BlogCategory> BlogCategories { get; set; }
}
}
,然后有一个看起来像
的控制器public PartialViewResult BlogCategories()
{
BlogCategoryViewModel viewModel = new BlogCategoryViewModel
{
BlogCategories = repository.BlogCategories.Include(b => b.Blogs)
};
return PartialView(viewModel);
}
我可以计算视图中每个类别中的博客数量。
这有效,但我有很多问题。这些是:
- 我需要撤回所有信息(即我真的不需要博客信息)。
- 在视图中计算计数似乎是不正确的。
我认为我需要更改视图模型,以便可以填充与每个类别相关的博客类别和博客数量,然后创建一个类别和博客计数的LINQ查询,但并非所有博客信息。我认为新的ViewModel应该符合
的线条 public BlogCategoryMenuItem(BlogCategory blogCategories, int numberOfBlogs)
{
BlogCategories = blogCategories;
NumberOfBlogs = numberOfBlogs;
}
public class BlogCategoryViewModel
{
public IEnumerable<BlogCategoryMenuItem> BlogCategoryMenuItem { get; set; }
}
我有两个问题:
1.这是解决我遇到的问题的最佳方法吗?
2.如何使用linq填充此ViewModel对象?
感谢您的帮助。
在我的博客中,我使用存储的过程来获取:
SELECT [Category].Name,
[Category].DisplayName,
COUNT(pc.PostId) AS PostCount
FROM [Category]
LEFT JOIN PostCategory pc
ON pc.CategoryId = [Category].Id
GROUP BY
[Category].Name,
[Category].DisplayName
然后,我将其映射到实体框架中,该框架生成" getCategoryCountlist_result"类。
在我的cshtml视图中:
@model List<EdiBlog.Core.Entities.GetCategoryCountList_Result>
...
@if (Model.Count > 0)
{
foreach (var item in Model)
{
<li>
<a href="@Url.Content("~/Category/List/" + @item.Name)">@item.DisplayName <span class="count uiSideNavCount fr">@item.PostCount</span></a>
</li>
}
}
我会查看自动应用程序,其旨在从实体创建视图模型。如果正确命名属性,它将自动进行映射。另外,您可以定义映射自己。可以在这里找到一些用法建议https://github.com/automapper/automapper
以下文章涵盖了基础知识http://visualstudiomagazine.com/articles/2012/02/01/simplify-your-projections-with-automapper.aspx
您只需在实体和视图模型之间定义映射,然后调用映射,该映射可以很简单:
Mapper.CreateMap<Customer, CustomerInfo>();
var CustomerInfo = Mapper.Map<Customer, CustomerInfo>(customer);
Automapper尝试根据命名约定匹配字段,然后根据实体等值设置值。