Linq中如何搜索并生成List中的List

发布于 2022-09-07 20:33:19 字数 1250 浏览 22 评论 0

前提:

数据库中有这样两个表:User和Score表。

User
id    name    班级    年龄
1    Young    一班    25
2    Hong     二班    24

Score
id    userId    course    score
10    1        数据结构    100
11    1        高等数学    90
12    2        数据结构    95
13    2        高等数学    85

当前我通过这样一句linq语句联查:

(from u in User join s in Score
on u.id equals s.userId
select MapToEntity(u,s)).ToList());

private User MapToEntity(User u, Score s){
    u.score = s;
    return u;
}

联查后得出的结果是这样的:

{
    User{
        Young,一班,25,
        Score{
            10,1,数据结构,100
        }
    },
    User{
        Young,一班,25,
        Score{
            11,1,高等数学,90
        }
    },
    User{
        Hong,二班,24,
        Score{
            12,2,数据结构,95
        }
    },
    User{
        Hong,二班,24,
        Score{
            13,2,高等数学,85
        }
    }
}

问题

如何通过Linq搜索可以得出这样的结果:

{
    User{
        Young,一班,25,
        Score{
            10,1,数据结构,100
        },
        Score{
            11,1,高等数学,90
        }
    },
    User{
        Hong,二班,24,
        Score{
            12,2,数据结构,95
        },
        Score{
            13,2,高等数学,85
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉城メ夜风 2022-09-14 20:33:19

我定义的类和你的不同:

class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Class { get; set; }
    public int Age { get; set; }
}

class Score
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public string Course { get; set; }
    public int Value { get; set; }
}

思路是先对分数按照 UserId 进行分组,然后再与 User 进行连接操作。

from user in users
join scoreList in from score in scores
                  group score by score.UserId into scoreGroup
                  select new
                  {
                      UserId = scoreGroup.Key,
                      Scores = scoreGroup
                  } on user.Id equals scoreList.UserId
select new
{
    user.Name,
    user.Class,
    user.Age,
    scoreList.Scores
}

输出为:

[
  {
    "Name": "Young",
    "Class": "一班",
    "Age": 15,
    "Scores": [
      {
        "Id": 10,
        "UserId": 1,
        "Course": "数据结构",
        "Value": 100
      },
      {
        "Id": 11,
        "UserId": 1,
        "Course": "高等数学",
        "Value": 90
      }
    ]
  },
  {
    "Name": "Hong",
    "Class": "二班",
    "Age": 24,
    "Scores": [
      {
        "Id": 12,
        "UserId": 2,
        "Course": "数据结构",
        "Value": 95
      },
      {
        "Id": 13,
        "UserId": 2,
        "Course": "高等数学",
        "Value": 85
      }
    ]
  }
]

代码:

到 Ubuntu Pastebin 查看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文