Фильтрация данных на основе данных через несколько отношений - PullRequest
0 голосов
/ 28 сентября 2011

Итак, у меня есть это в моей БД:

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 ]

1 голос
/ 29 сентября 2011

Я воссоздал вашу схему БД, и это то, что у меня сработало ...

@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>
   }
}
1 голос
/ 28 сентября 2011

Это может сработать:

Model.Vendors.Where(v => v.Commodities.Any(c => c.CommodityCategory.Id ==
                                                          commodityCategory.Id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...