首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中实现分组列表,不需要前缀就能显示结果?

如何在c#中实现分组列表,不需要前缀就能显示结果?
EN

Stack Overflow用户
提问于 2021-07-16 21:43:49
回答 1查看 104关注 0票数 0

我使用的是.net核心5网络应用程序接口项目。我有以下课程:

代码语言:javascript
复制
public class GroupedShowbackSummaryListDto
{
    public int RuleId { get; set; }
    public string RuleName { get; set; }
    public decimal TotalPrice { get; set; }
    public List<GroupedProjectForShowbackSummary> Projects { get; set; }
}

public class GroupedProjectForShowbackSummary
{
    public int? Id { get; set; }
    public string Name { get; set; }
    public decimal TotalPrice { get; set; }
}

我想按规则id分组并显示项目列表作为响应,我正在尝试:

代码语言:javascript
复制
 var queryable = _context.ShowbackSummaries.Where(x => x.ProjectId != null).AsQueryable();
  
 var summary = queryable.ToList();

 var grouped = summary.GroupBy(x => x.ShowbackRuleId).Select(c => new GroupedShowbackSummaryListDto
 {
            RuleId = c.Key,
            RuleName = c.Select(f => f.ShowbackRule.Name).First(),
            TotalPrice = c.Select(f => f.Price).Sum(),
            Projects = new List<GroupedProjectForShowbackSummary>
            {
                new()
                {
                    Id = c.Select(f => f.ProjectId).First(),
                    Name = c.Select(f => f.Project.Name).First(),
                    TotalPrice = c.Select(f => f.Price).First()
                }
            }
 }).ToList();


return grouped;

我知道我使用的是first,它只返回first project,但我想返回all,如果我切换到为ex列出int id,它将显示:

代码语言:javascript
复制
[
 100,
 101,
...
]

我希望我当前的回复有多个结果:

代码语言:javascript
复制
[
  {
    "ruleId": 1,
    "ruleName": "rule-1",
    "totalPrice": 400,
    "projects": [
      {
        "id": 1169,
        "name": "lubos-cncf",
        "totalPrice": 200
      }
    ]
  },
  {
    "ruleId": 2,
    "ruleName": "rule-2",
    "totalPrice": 300,
    "projects": [
      {
        "id": 1169,
        "name": "lubos-cncf",
        "totalPrice": 300
      }
    ]
  }
]

附言:得到所有像这样的项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-16 21:48:00

这应该可以工作(在GroupBy-Expression中):

代码语言:javascript
复制
                Projects = c.Select(f => 
                new GroupedProjectForShowbackSummary()
                {
                    Id = f.ProjectId,
                    Name = f.Project.Name,
                    TotalPrice = f.Price
                }).ToList()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68410088

复制
相关文章

相似问题

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