1

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

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

第二张桌子[T2]是

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

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

我想得到类似的结果

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

我对 sql 的 ling 就像

 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

4

3 回答 3

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

希望能帮助到你

于 2012-05-06T16:52:37.037 回答
0

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

var q = from t in context.t1
        select new { id = t1.id, names = t1.t2s.Select(t => t.Name).ToArray() };
于 2012-05-06T16:48:01.930 回答
0

您必须按 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() };
于 2012-05-06T16:48:54.703 回答