Как я могу сгруппировать данные в asp. net? - PullRequest
0 голосов
/ 02 мая 2020

Я использовал Инъекцию зависимостей для получения данных и отображения в моем представлении, которые все прекрасно работают, но мне нужна ваша помощь, чтобы сгруппировать результаты по полю ID.

В моем представлении у меня есть это:

@inject ICompanyService companyListService

@{
    var ProductID = Model.ID;
    var compInfo = await companyListService.GetCompanyByID(ProductID); 
}

Для создания списка я использовал этот код

<ul id="list" style="line-height: 0.01;">
              @foreach (var item in compInfo)
                     {
                      <li data-expanded="false" class="panel-handler" data-id="@item.ID">@item.CompanyName                             
                              <ul>
                                 <li class="panel-handler" data-expanded="true" data-id="@subcontractor.ID">@scontractor.ContractorName</li>
                               </ul>                                                                
                       </li>
                    }
      </ul>

мои данные выглядят так, как показано ниже

ID     CompanyID   CompanyName   ContractorName
255     13          MULETA PLC   YIBA ENGINEERING
255     13          MULETA PLC   SUNS CONST.
260     13          MULETA PLC   YIBA ENGINEERING
260     13          MULETA PLC   SUNS CONST.

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

MULETA PLC
    >>>YIBA ENGINEERING
    >>>SUNS CONST.
MULETA PLC
    >>>YIBA ENGINEERING
    >>>SUNS CONST.

Мое выражение linq выглядит как

 var CompanyInfo =  await Context.Company
                           .Where(b => b.ProductID == request.ID)
                           .ToListAsync();

Мне нужна ваша помощь, я сгруппировал результат по полю ID.

Мой контроллер API

    [HttpGet("{ID}")]
    public async Task<IActionResult> GetCompanyByID(int produtID)
    {
        var company= await companyListService.GetCompanyByID(productID); 
        var companyList= company.GroupBy(x => x.ID);
        return Ok(companyList);
    }

и результат

[ [ { "ID": 13, "CompName": "MULETA PLC ", "ContractorName": "ENGINEERING" }, 
{ "ID": 13, "CompName": "MULETA PLC ", "ContractorName": "SUNS CONST." } ],

1 Ответ

1 голос
/ 02 мая 2020

Добавьте ссылку на Linq с помощью using System.Linq; и используйте .GroupBy(x=>x.GroupByPropertyName)

В вашем случае это будет;

var CompanyInfo =  await Context.Company
                           .Where(b => b.ProductID == request.ID)
                           .GroupBy(b=>b.Id);

CompanyInfo не список, а тип Grouping<Key,Model>. См. Приведенный ниже код для доступа к его значениям:

var CompanyInfo =  await Context.Company
                           .Where(b => b.ProductID == request.ID)
                           .GroupBy(b=>b.ResultId);

foreach(var request in CompanyInfo){
   Console.WriteLine(request.Key); // this will be the Request Id

   foreach(var properties in request){

      // this will be your model containing the properties
      Console.WriteLine(request);
      Console.WriteLine(request.Id);
      Console.WriteLine(request.CompanyId);
      Console.WriteLine(request.ContractorName);
   }
}

Сначала попробуйте эту простую разметку, а затем просто измените ее в соответствии с вашим дизайном. Вам нужно сделать вложенный цикл;

<ul>
   @foreach (var item in compInfo)
   {
      <li>
         @item.Key.ToString() - @item.FirstOrDefault().CompanyName
         <ul>
            foreach(var record in item){
               <li>@record.ContractorName</li>
            }
         </ul>                                                                
      </li>
   }
</ul>
...