首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在asp.net中对数据进行分组?

如何在asp.net中对数据进行分组?
EN

Stack Overflow用户
提问于 2020-05-02 03:41:27
回答 1查看 59关注 0票数 0

我使用依赖项注入来获取数据并在我的视图中显示,这一切都很好,但是我需要您的帮助,以便根据ID字段将结果分组。

在我看来,我有这样的看法:

代码语言:javascript
复制
@inject ICompanyService companyListService

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

要创建一个列表,我使用了以下代码

代码语言:javascript
复制
<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>

我的数据如下所示

代码语言:javascript
复制
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.

我需要您的帮助,以分组上述数据,以获得以下结果。

代码语言:javascript
复制
MULETA PLC
    >>>YIBA ENGINEERING
    >>>SUNS CONST.
MULETA PLC
    >>>YIBA ENGINEERING
    >>>SUNS CONST.

我的linq表达式看起来就像

代码语言:javascript
复制
 var CompanyInfo =  await Context.Company
                           .Where(b => b.ProductID == request.ID)
                           .ToListAsync();

我需要你的帮助,我把结果按ID字段分组。

我的API控制器

代码语言:javascript
复制
    [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);
    }

和结果

代码语言:javascript
复制
[ [ { "ID": 13, "CompName": "MULETA PLC ", "ContractorName": "ENGINEERING" }, 
{ "ID": 13, "CompName": "MULETA PLC ", "ContractorName": "SUNS CONST." } ],
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-02 05:40:30

使用using System.Linq;添加对Linq的引用,并使用.GroupBy(x=>x.GroupByPropertyName)

在你的情况下,它将是;

代码语言:javascript
复制
var CompanyInfo =  await Context.Company
                           .Where(b => b.ProductID == request.ID)
                           .GroupBy(b=>b.Id);

CompanyInfo不是一个列表,而是一种Grouping<Key,Model>类型。请参阅下面的代码来访问其值;

代码语言:javascript
复制
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);
   }
}

先尝试这个简单的标记,然后根据您的设计修改它。你需要做一个嵌套循环;

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61554192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档