【问题标题】:LINQ to SQL get one-to-many table column result as arrayLINQ to SQL 获取一对多表列结果作为数组
【发布时间】:2012-05-15 09:07:17
【问题描述】:

我有一张包含这些信息的桌子[T1]

  1. 身份证
  2. 用户 ID
  3. 其他...

第二张桌子[T2]是

  1. 身份证
  2. 用户 ID
  3. 姓名

关系是一个来自 T1 的用户可以拥有多个 T2

我想得到类似的结果

  1. ID = 号码
  2. 用户 ID = 号码
  3. 数组[t2.name,t2.name,t2.name]

我的 ling to 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

【问题讨论】:

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


    【解决方案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();
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

       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() };
      

      【讨论】:

        【解决方案3】:

        您不需要使用联接。在 linq 设计器中创建两个 linq 实体的关系,然后您可以运行如下查询:

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

        【讨论】:

          猜你喜欢
          • 2012-05-15
          • 2012-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多