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

前提:

数据库中有这样两个表: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
        }
    }
}
阅读 3k
1 个回答

我定义的类和你的不同:

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 查看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏