Linq GroupBy Показать детали из списка - PullRequest
0 голосов
/ 08 октября 2018

enter image description here

ОБНОВЛЕНИЕ Я добавил изображение, чтобы показать, что возвращается Я пытаюсь создать меню, где отображаются категория и производитель(из которого я могу получить данные), но я не могу получить продукт из списка, который находится в GroupBy.

Мой код:

IEnumerable<IPublishedContent> getAllProducts = UmbracoAssignedContentHelper.PageContentByAlias("productCatalog").Children;

var result = getAllProducts.GroupBy(x => new { Manufacturer = x.GetPropertyValue<string>("manufacturer"), Category = x.GetPropertyValue<string>("category")})
    .Select(b => new ProductsGroupByTypeViewModel
    {
        GetAllProductsGroupByType   = b.Select(bn => bn.GetPropertyValue<IEnumerable<string>>("product").ToList()),
        Category                    = b.Key.Category,
        Manufacturer                = b.Key.Manufacturer

    }).ToList();

var listOfProducts = result.ToList();  

ПОСМОТРЕТЬ МОДЕЛЬ

public IEnumerable<List<string>> GetAllProductsGroupByType { get; set; }
public string Category { get; set; }
public string Manufacturer { get; set; }

Моя последняя попытка была

<ul>
    @foreach (var data in Model)
    {
        <li>@data.GetAllProductsGroupByType</li> <---------What do I need to do here
    }
</ul> 

, которая отображает

System.Linq.Enumerable + WhereSelectEnumerableIterator 2[Umbraco.Core.Models.IPublishedContent,System.Collections.Generic.List 1 [System.String]] System.Linq.Enumerable + WhereSelectEnumerableIterator 2[Umbraco.Core.Models.IPublishedContent,System.Collections.Generic.List 1 [System.String]]

Как выполнить детализацию и получить данные о продукте для отображения?

Любая помощь будет оценена

Что касается ответа Эльдо, я пробовал это, и оно не работает.Я получаю сообщение об ошибке.

Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым.От GetAllProductsGroupByType = b.Select(bn => bn.GetPropertyValue<IEnumerable<string>>("product").ToList()),

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Попробуйте вот так

IEnumerable<IPublishedContent> getAllProducts = UmbracoAssignedContentHelper.PageContentByAlias("productCatalog").Children;

var result = getAllProducts.GroupBy(x => new { Manufacturer = x.GetPropertyValue<string>("manufacturer"), Category = x.GetPropertyValue<string>("category")})
    .Select(b => new ProductsGroupByTypeViewModel
    {
        GetAllProductsGroupByType   = b.Select(bn => bn.GetPropertyValue<List<string>>("product")),
        Category                    = b.Key.Category,
        Manufacturer                = b.Key.Manufacturer

    }).ToList();

var listOfProducts = result.ToList();  

Модель данных

public List<List<string>> GetAllProductsGroupByType { get; set; }
public string Category { get; set; }
public string Manufacturer { get; set; }

Просмотр

@foreach (var data in Model)
{
    if(data.GetAllProductsGroupByType != null || data.GetAllProductsGroupByType.Count == 0)
    {
        continue;
    }

    foreach(var item in data.GetAllProductsGroupByType)
    {
       <li>item</li>
    }
}
0 голосов
/ 08 октября 2018

Я думаю, что вы не можете сделать это одной группой и выбрать.Может быть, приведенный ниже фрагмент кода работает

IEnumerable<IPublishedContent> getAllProducts = UmbracoAssignedContentHelper.PageContentByAlias("productCatalog").Children;

var result = getAllProducts.GroupBy(x => new { Manufacturer = x.GetPropertyValue<string>("manufacturer"), Category = x.GetPropertyValue<string>("category")})
    .Select(b => new ProductsGroupByTypeViewModel
    {
        GetAllProductsGroupByType   = new List<string>(),
        Category                    = b.Key.Category,
        Manufacturer                = b.Key.Manufacturer

    }).ToList();

froeach(var item in result)
{
    item.GetAllProductsGroupByType = getAllProducts.Where(en => en.manufacturer == item.Manufacturer && en.category == item.Category).Select(en => en.product).ToList();
}

//now you can use result as your answer
...