2016-08-05 58 views
1

我有两个表:包括实体和计数在asp.net实体从不同的表中的数据

Talbe 1 - 物品

id | item | categoryId 
________________________ 
1 | item1 |  1 
2 | item2 |  2 
3 | item3 |  2 

表2 - 分类

categoryid | categoryName 
___________________________ 
1   | iphones 
2   | ipads 
3   | ipods 

Talbe 1是动态的,即用户添加项目,我有查看并希望显示一个表,显示类别和麻木呃类别中的项目。 我正在使用实体。

我的模型

项目

public int id { get; set } 
public string item { get; set; } 
public virtual Category Category { get; set; } 

类别

public int id { get; set; } 
public string categoryName { get; set; } 
public virtual Icollection<Item> Items { get; set; } 

所以我迷茫如何计算在项目数据和附加到的类别。 谢谢。

+0

不清楚你的问题,你需要什么? 'Cascade DropDownList' – Codeone

+0

我想将类别列表传递给我的视图,并且每个类别旁边我想显示类别中的多少项,就像categoryName | items_in_category .... –

回答

1

查询类别时,您可以在Items属性上使用LINQ Count方法。

为您的视图创建视图模型。

public class CategoryVm 
{ 
    public int Id {set;get;} 
    public string Name {set;get;} 
    public int ItemCount {set;get;} 
} 

,并在你的GET操作方法,你可以使用LINQ查询类别表和结果投射到的CategoryVm

public ActionResult Categories() 
{ 
    var db = new YourDbContext(); 
    var categoryVmList = db.Categories.Select(x=> new CategoryVm { 
                Id=x.Id, 
                Name=x.Name, 
                ItemCount = x.Items.Count() } 
              ).ToList(); 
    return View(categoryVmList); 
} 

现在,在您的视图(Categories.cshtml)的集合,其是强类型到CategoryVm的列表中,您可以遍历列表并根据需要显示属性值。

@model List<CategoryVm> 
<h2>Categories</h2> 
@foreach(var cat in Model) 
{ 
    <div> 
    <p>@cat.Name <span>@cat.ItemCount</span></p> 
    </div> 
} 
+0

谢谢,但现在我有一个错误“没有为以下EntitySet/AssociationSet - CategoryVms指定映射” –

+0

CategoryVm是我们为视图创建的视图模型。没有必要为此做任何映射。我们正在读取实体对象值并分配给此视图模型对象。哪条线路出现此错误?你在其他地方使用这门课吗? – Shyju

+0

我没有在其他地方使用CategoryVm,现在我收到错误“实体或复杂类型'Model.CategoryVm'无法在LINQ to Entities查询中构建。” –