For xml path

假設有一張表如圖:c#

不少時候,咱們但願它以一條數據顯示出來,而不是分多條顯示。好比:ide

張三   語文,英語,物理

李四   數學,化學

咱們能夠用兩種方式能夠來實現。第一種用c#代碼在程序裏進行拼接,好比我能夠這樣去實現,我先查出ID,Name,而後遍歷的時候,經過ID去查詢Course,而後在一塊兒返回數據。例:spa

 1  static Func<DataTable, List<string>> ConvertToList = dt => {
 2 
 3             var result = new List<string>();
 4 
 5             foreach (DataRow dr in dt.Rows) {
 6 
 7                 result.Add(dr[0].ToString());
 8             }
 9 
10             return result;
11 
12         };
13 
14 
15 query.ForEach(m => result.Add(new Student {
16                 ID = m.ID,
17                 Name = m.Name,
18                 Course = string.Join(",", ConvertToList(dt))
19 
20             }));
View Code

第二種用 for xml path 直接把數據查詢出來。(之前知道這個東西,但印象不深,今天才知道能夠這樣實現 -_-||)code

1 select name,stuff((select ','+Course from Student
2          where name = '張三' for xml path('')),1,1,'')
3          from Student where name = '張三' 
4          group by name
View Code

stuff是用來去除字符串第一個位置的「,」。xml

for xml path 不只是用來拼接,它還能夠返回xml數據類型blog

select * from Student for xml path

結果:字符串

 1 <row>
 2     <ID>1</ID>
 3     <Name>張三</Name>
 4     <Course>語文</Course>
 5 </row>
 6 <row>
 7     <ID>2</ID>
 8     <Name>李四</Name>
 9     <Course>數學</Course>
10 </row>
11 <row>
12     <ID>3</ID>
13     <Name>張三</Name>
14     <Course>英語</Course>
15 </row>
16 <row>
17     <ID>4</ID>
18     <Name>張三</Name>
19     <Course>物?理¤¨ª</Course>
20 </row>
21 <row>
22     <ID>5</ID>
23     <Name>李四</Name>
24     <Course>化學</Course>
25 </row>
View Code

若是要自定義列名,也像日常寫SQL語句同樣,用AS就能夠了.數學

select ID as '自定義列名',Name as '自定義列名',Course as '自定義列名' 
from Student for xml path('自定義根節點')
相關文章
相關標籤/搜索