• Linq数据类型转换



     

    通过使用 LINQ 查询,可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。可以通过排序和分组来修改序列本身,而不必修改元素本身。但是,LINQ 查询最强大的功能可能在于它能够创建新类型,这一功能在 select 子句中实现


    (一)Student



    public class Student
    {
       
    public string FirstName { get; set; }
       
    public string LastName { get; set; }
       
    public int Unid { get; set; }
       
    public List<int> Scores { get; set; }
    }



    (二)选择源元素子集


    学生列表集合


    List<Student> _list = new List<Student>()
    {
    new Student {FirstName="Svetlana", LastName="Omelchenko",
                 Unid
    =111, Scores = new List<int>{97, 92, 81, 60}},
    new Student {FirstName="Claire", LastName="O’Donnell",
                 Unid
    =112, Scores = new List<int>{75, 84, 91, 39}},
    new Student {FirstName="Sven", LastName="Mortensen",
                 Unid
    =113, Scores = new List<int>{88, 94, 65, 91}}
    };



    1)选择一个成员


    ·选择FirstName




    var list = from p in _list select p.FirstName;

    foreach (string s in list)
        Console.WriteLine(s);




    这里可以使用匿名类型。因为select部分为字符串类型,所以,也可以是字符串型泛型集合




    List<string> list = (from p in _list
                        select p.FirstName).ToList
    <string>();
    foreach (string s in list)
       Console.WriteLine(s);




    ·选择Scores


    这里为整型泛型集合,


    可以使用匿名类型



    var list1 = from p in _list select p.Scores;

    foreach (var l in list1)
    {
      
    foreach (int i in l)
          Console.WriteLine(i);
    }



    因为结果集为整型泛型集合,所以也可以使用




    List<List<int>> list = (from p in _list
    select p.Scores).ToList
    <List<int>>();

    foreach (List<int> l in list)
    {
       
    foreach (int i in l)
           Console.WriteLine(i);
    }




    2)选择多个成员


    ·使用匿名类型




    var q = from p in _list
            select
    new { Name = p.FirstName + "·" + p.LastName };

    foreach (var x in q)
        Console.WriteLine(x.Name);




    其中select返回部分也为一个复合类型,所以在访问时,要以元素的.Name来访问。



    如果使用匿名类型时,不采用别名赋值的话,会有异常:


    无效的匿名类型成员声明符。匿名类型成员必须使用赋值、简单名称或成员访问来声明。


    ·使用命名对象


    新建Sample



    public class Sample
    {
       
    public string Name { get; set; }
    }



    使用




    var q = from p in _list
            select
    new Sample { Name = p.FirstName + "·" + p.LastName };

    foreach (var x in q)
        Console.WriteLine(x.Name);




    发现与匿名类型复合值时相近。其实也就是:




    List<Sample> list= (from p in _list
        select
    new Sample { Name = p.FirstName + "·" + p.LastName }).ToList<Sample>();

    foreach (Sample x in list)
        Console.WriteLine(x.Name);




    (三)转换为Xml


    还是用上边那那个学生集合




    List<Student> _list = new List<Student>()
    {
    new Student {FirstName="Svetlana", LastName="Omelchenko",
                 Unid
    =111, Scores = new List<int>{97, 92, 81, 60}},

    new Student {FirstName="Claire", LastName="O’Donnell",
                 Unid
    =112, Scores = new List<int>{75, 84, 91, 39}},

    new Student {FirstName="Sven", LastName="Mortensen",
                 Unid
    =113, Scores = new List<int>{88, 94, 65, 91}}
                };

    var xele
    = new XElement("Students",
                  from student
    in _list
            let x
    = String.Format("{0},{1},{2},{3}",
            student.Scores[
    0],
            student.Scores[
    1],
            student.Scores[
    2],
            student.Scores[
    3])

                    select
    new XElement("student",
                       
    new XElement("FirstName",student.FirstName),
                       
    new XElement("LastName", student.LastName),
                       
    new XElement("Unid", student.Unid),
                       
    new XElement("Scores", x)
                        )
                    );

    Console.WriteLine(xele);



    现在分析一下:


    1Xelement元素的构造方法




    public XElement(XName name,Object[] content)



    2)上边的生成xml的构造方法其实使用的就是这个


    第一部分:"Students"为根元素


    而下边那么多其实是一行的内容,即占用第二个参数,要记住一句话
    查询在select中实现。所以意思就是返回Xelement类型的结果集,而这个结果集正好为构造方法中Object[] content部分。


    可知道student这个元素包含4个子节点。而Scores这里是List<int>类型,所以设定了返回类型及格式为字符串且用逗号隔开。(Let:可以将表达式结果存放在新的范围变量中)。

  • 相关阅读:
    php将汉字转换为拼音和得到词语首字母(一)
    json字符串、json对象、数组之间的转换
    nginx配置详解(转)
    layer弹出层效果
    Ajax最详细的参数解析和场景应用
    bootstrap table使用指南
    JS的内置对象
    ThinkPHP导出CSV、Excel
    ThinkPHP的易忽视点小结
    sublime text 删除插件
  • 原文地址:https://www.cnblogs.com/hyd309/p/2286289.html
Copyright © 2020-2023  润新知