通过多种关系基于数据过滤数据

时间:2011-09-28 18:25:58

标签: c# asp.net asp.net-mvc linq entity-framework

所以我在我的数据库中有这个:

CommodityCategories
-------------------
CommodityCategoryID (PK)
Name

Commodities
-------------------
CommodityID (PK)
CommodityCategoryID (FK)
Name

VendorsCommodities
-------------------
VendorID (PK, FK)
CommodityID (PK, FK)

Vendors
-------------------
VendorID
Name

基本上,商品有商品类别,供应商有多种商品。

我想显示每个商品类别的名称,并在下方显示具有与该商品类别相关的商品的每个供应商的名称。这就是我所拥有的:

@foreach (var commodityCategory in Model.CommodityCategories)
{
    <h3><a href="#">@commodityCategory.Name</a></h3>
    <div>
        @foreach (var vendor in Model.Vendors)
        {
            <span>@vendor.Name</span>
        }
    </div>
}

我需要按照我正在循环的当前商品类别过滤Model.Vendors。我尝试了Model.Vendors.Where(v => v.Commodities.CommodityCategories.Contains(commodityCategory)),但CommodityCategories不是v.Commodities的属性。

我有什么方法可以这样做吗?

2 个答案:

答案 0 :(得分:1)

这可行:

Model.Vendors.Where(v => v.Commodities.Any(c => c.CommodityCategory.Id ==
                                                          commodityCategory.Id))

答案 1 :(得分:1)

我重新创建了你的数据库架构,这对我有用......

@foreach (var catagory in Model)
{
   <h3><a href="#">@catagory.Name</a></h3>

   if (catagory.Commodities.Any(commodity => commodity.Vendors.Count > 0))
   {
      <div>
      @foreach (var vendor in catagory.Commodities.SelectMany(c => c.Vendors).Distinct())
      {
         <span>@vendor.Name</span><br />
      }
      </div>
   }
}