3

SearchOutputであるプロパティを持つFilterGroupsクラスがありますIEnumerable<FilterGroup>。この例では、FilterGroupsはプロパティFiltersとを保持している2つのオブジェクトのリストですName。両方のオブジェクトは、異なるフィルターと異なる名前(「ブランド」と「色」)を保持しています。

LINQを使用してこれらのオブジェクトのフィルターの1つだけを取得するにはどうすればよいですか?

ビュー内の私のコードは次のとおりです。

@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);
4

1 に答える 1

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>
}
于 2012-07-11T22:23:25.840 に答える