在一个字段中连接多个行

时间:2014-02-26 04:58:25

标签: c# linq tsql

我有2张表格如下

Table1
Id       TagNo        FBay      FPanel      TBay     TPanel
------------------------------------------------------------
 1        10000        A1         A2         E4        F2
 2        10001        A2         R2         F2        Q1


Table2
 Id      TagNo    CNo     FDevice
-----------------------------
  1       10000    1       X101
  2       10000    2       XF09
  3       10000    3       X101
  4       10000    4       XY
  5       10001    1       X20
  6       10002    2       X20
  7       10003    3       X20

我想要这个结果

  TagNo        FBay      FPanel      TBay     TPanel       FDevice
  -----------------------------------------------------------------
   10000        A1         A2         E4        F2       X101,XF09,XY
   10001        A2         R2         F2        Q1       X20

记录的数量太多,如果我想使用Stuff Tsql,需要7分钟才能从数据库中获得一个不太好的结果。有没有解决方案可以得到这个结果?

这是我在其中使用了东西的查询的一部分

SELECT Distinct TagNo, FDevice = STUFF((SELECT ',' + FDevice FROM Table2 i
                      WHERE
                      i.TagNo = o.TagNo AND
                      FOR XML PATH('')),1,1,'')
                      FROM Table2 o
                      GROUP BY TagNo

1 个答案:

答案 0 :(得分:1)

LINQ中没有任何 Stuff()函数。但也许你可以用这个来实现同样的目标

var results = from rw in Table2
            group rw.FDevice by new { rw.TagNo } into grp
            select new { grp.Key.TagNo, FDevice = string.Join (", ", grp) };

注意:我没有在VS中测试它,因此可能存在语法错误。请评论,如果有的话,谢谢。