2012-07-11 76 views
3

我有一个类SearchOutput它有一个属性FilterGroups这是一个IEnumerable<FilterGroup>。在这种情况下,FilterGroups是包含属性FiltersName的两个对象的列表。两个对象都有不同的过滤器和不同的名称(“品牌”和“颜色”)。LINQ查询有2个集合的对象

我怎样才能得到这些对象的过滤器之一使用LINQ?

这里是我的视图代码:

@foreach(var filterGroup in Model.FilterGroups) 
{ 
    foreach(var filter in filterGroup.Filters.Take(10)) 
    { 
     <li> 
      <a href="javascript:void(0)"><span class="tickMark"></span><strong>@filter.Name<span>(@filter.ProductCount)</span></strong></a> 
     </li> 
    } 
} 
我的课:
public sealed class Filter 
{ 
    public string Id { get; set; } 

    public bool IsChecked { get; set; } 

    public string Name { get; set; } 

    public int ProductCount { get; set; } 
} 

[DebuggerDisplay("{Name}")] 
public sealed class FilterGroup 
{ 
    public IEnumerable<Filter> Filters { get; set; } 

    public string Name { get; set; } 
} 

public sealed class SearchOutput 
{ 
    ... 
    public IEnumerable<FilterGroup> FilterGroups { get; set; } 
    ... 
} 
我的控制器的操作:
var searchOutput = new SearchOutput 
{ 
    Layout = layout, 
    ActionUrl = "/shop/{0}/{1}".FormatForInvariantCulture(input.Slug, input.Id), 
    BreadboxSection = breadboxSection, 
    Breadcrumbs = breadcrumbLinks, 
    CurrentPage = page, 
    FilterGroups = filterGroups, 
    Name = isStorefront ? breadcrumbLinks.Last().Text : string.Empty, 
    NextPageUrl = BuildNextPageUrl(products, input, page, selections, sort), 
    PreviousPageUrl = BuildPreviousPageUrl(input, page, selections, sort), 
    Products = productList, 
    Selections = selections, 
    SpotlightFilters = spotlightFilters, 
    TotalPages = BuildTotalPages(products), 
    UpcomingShows = UpcomingShows 
}; 

if(isStorefront) 
    return View("~/Views/" + RenderViewType + "/Store.cshtml", searchOutput); 
else 
    return View("~/Views/" + RenderViewType + "/Search.cshtml", searchOutput); 
+0

它可能有助于将您传递的类作为模型传递给您的视图,但很难理解您要求的内容 – arserbin3 2012-07-11 21:58:13

+0

是“SearchOutput.FilterGroups”简单地是“IEnumerable ”?如果是这样,我不明白它是如何包含'2集合都拥有2个属性筛选器和名称' – arserbin3 2012-07-11 22:12:38

+0

那么在'FilterGroups'内没有'两个集合都持有2个道具'..所以你现在做的看起来是正确的 – arserbin3 2012-07-11 22:16:38

回答

0

,而不是通过的foreach FilterGroup循环,你可以抢了先的FiltersFilterGroup与此:

@foreach(var filter in Model.FilterGroups.First(x => x.Name == "Brands").Filters.Take(10)) 
{ 
    <li> 
     <a href="javascript:void(0)"><span class="tickMark"></span><strong>@filter.Name<span>(@filter.ProductCount)</span></strong></a> 
    </li> 
} 

@foreach(var filter in Model.FilterGroups.First(x => x.Name == "Color").Filters.Take(10)) 
{ 
    <li> 
     <a href="javascript:void(0)"><span class="tickMark"></span><strong>@filter.Name<span>(@filter.ProductCount)</span></strong></a> 
    </li> 
} 
+0

其实我怎样才能得到各自的收集? – 2012-07-11 22:25:46

+0

我会编辑它来演示,根据您的评论关于品牌和颜色 – arserbin3 2012-07-11 22:30:51

+0

我需要获得过滤器WHERE Filter.Name等于FilterGroup.Name – 2012-07-11 22:51:25