zoukankan      html  css  js  c++  java
  • For xml path

    假设有一张表如图:

    很多时候,我们希望它以一条数据显示出来,而不是分多条显示。比如:

    张三   语文,英语,物理
    
    李四   数学,化学

    我们可以用两种方式可以来实现。第一种用c#代码在程序里进行拼接,比如我可以这样去实现,我先查出ID,Name,然后遍历的时候,通过ID去查询Course,然后在一起返回数据。例:

     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 直接把数据查询出来。(以前知道这个东西,但印象不深,今天才知道可以这样实现 -_-||)

    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是用来去除字符串第一个位置的“,”。

    for xml path 不仅是用来拼接,它还可以返回xml数据类型

    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('自定义根节点')
  • 相关阅读:
    1 . CentOS 7的yum更换为国内的阿里云yum源
    0. vagrant+vbox创建centos7虚拟机
    git上传到码云和下载到本地
    spring boot udp或者tcp接收数据
    你好,博客园
    使用firdder抓取APP的包
    初见loadrunner
    sublime快捷键大全
    html中行内元素与块级元素的区别。
    html.css溢出
  • 原文地址:https://www.cnblogs.com/qiuyan/p/3552932.html
Copyright © 2011-2022 走看看