LINQ to SQL将一对多表列结果作为数组

时间:2012-05-06 16:38:00

标签: asp.net sql database linq-to-sql

我有一个表[T1]与此信息

  1. ID
  2. 用户ID
  3. 其他...
  4. 第二桌[T2]是

    1. ID
    2. 用户ID
    3. 名称
    4. 关系是来自T1的一个用户可以有很多T2

      我希望得到像

      这样的结果
      1. ID = number
      2. UserID = number
      3. 阵列[t2.name,t2.name,t2.name]
      4. 我对sql的感觉就像

         var result = (from t1 in context.t1
                      join t2 in context.UserID on t1.ID equals t2.UserID 
                      select new CLASS
                      {
                          ID = t1.ID,
                          UserID = t1.UserID,
                          Names = t2.name
                       }).Take(10).ToList();
        

        但是这给了我结果,因为每个t2.name都是分隔的行。我如何收集阵列中的所有名字?

        LINQ to SQL,ASP.NET C#4.0

3 个答案:

答案 0 :(得分:1)

我认为这样的事情应该有效

var result = (from t1 in context.t1
              join t2 in context.UserID on t1.ID equals t2.UserID 
              select new CLASS
              {
                  ID = t1.ID,
                  UserID = t1.UserID,
                  Names = (from t2 in context.t2
                           select t2.Name
                           where t2.userID = t1.userID).toArray(),
              }).Take(10).ToList();

希望有所帮助

答案 1 :(得分:0)

您无需使用联接。在linq设计器中创建一个b / n你的两个linq entites的关系然后你可以运行这样的查询:

var q = from t in context.t1
        select new { id = t1.id, names = t1.t2s.Select(t => t.Name).ToArray() };

答案 2 :(得分:0)

您必须按ID /用户ID对结果进行分组:

 var result = (from t1 in context.t1
              join t2 in context.UserID on t1.ID equals t2.UserID
              group by new { t1.ID, t1.UserID } into g
              select new CLASS
              {
                  ID = g.Key.ID,
                  UserID = g.Key.UserID,
                  Names = g.ToArray()
              }).Take(10).ToList();

但是,当正确准备LINQ to SQL类时,可以进行如下类型的查询:

var result = from t1 in context.t1 select new { id = t1.id, names = t1.t2s.ToArray() };