zoukankan      html  css  js  c++  java
  • LINQ-进行数据转换

    一、将多个输入联接到一个输出序列中

    可以使用 LINQ 查询创建包含元素的输出序列,这些元素来自多个输入序列。 以下示例演示如何组合两个内存中数据结构,但相同的原则可应用于组合来自 XML 或 SQL 或数据集源的数据。 假设以下两种类类型:

    class Student
    {
        public string First { get; set; }
        public string Last {get; set;}
        public int ID { get; set; }
        public string Street { get; set; }
        public string City { get; set; }
        public List<int> Scores;
    }
    
    class Teacher
    {
        public string First { get; set; }
        public string Last { get; set; }
        public int ID { get; set; } 
        public string City { get; set; }
    }

    以下示例演示了查询:

    class DataTransformations
    {
        static void Main()
        {
            // Create the first data source.
            List<Student> students = new List<Student>()
            {
                new Student { First="Svetlana",
                    Last="Omelchenko",
                    ID=111,
                    Street="123 Main Street",
                    City="Seattle",
                    Scores= new List<int> { 97, 92, 81, 60 } },
                new Student { First="Claire",
                    Last="O’Donnell",
                    ID=112,
                    Street="124 Main Street",
                    City="Redmond",
                    Scores= new List<int> { 75, 84, 91, 39 } },
                new Student { First="Sven",
                    Last="Mortensen",
                    ID=113,
                    Street="125 Main Street",
                    City="Lake City",
                    Scores= new List<int> { 88, 94, 65, 91 } },
            };
    
            // Create the second data source.
            List<Teacher> teachers = new List<Teacher>()
            {                
                new Teacher { First="Ann", Last="Beebe", ID=945, City="Seattle" },
                new Teacher { First="Alex", Last="Robinson", ID=956, City="Redmond" },
                new Teacher { First="Michiyo", Last="Sato", ID=972, City="Tacoma" }
            };
            
            // Create the query.
            var peopleInSeattle = (from student in students
                        where student.City == "Seattle"
                        select student.Last)
                        .Concat(from teacher in teachers
                                where teacher.City == "Seattle"
                                select teacher.Last);
    
            Console.WriteLine("The following students and teachers live in Seattle:");
            // Execute the query.
            foreach (var person in peopleInSeattle)
            {
                Console.WriteLine(person);
            }
            
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    /* Output:
        The following students and teachers live in Seattle:
        Omelchenko
        Beebe
     */

    二、将内存中对象转换为 XML

    LINQ 查询可以方便地在内存中数据结构、SQL 数据库、ADO.NET 数据集和 XML 流或文档之间转换数据。 以下示例将内存中数据结构中的对象转换为 XML 元素。

    class XMLTransform
    {
        static void Main()
        {            
            // Create the data source by using a collection initializer.
            // The Student class was defined previously in this topic.
            List<Student> students = new List<Student>()
            {
                new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores = new List<int>{97, 92, 81, 60}},
                new Student {First="Claire", Last="O’Donnell", ID=112, Scores = new List<int>{75, 84, 91, 39}},
                new Student {First="Sven", Last="Mortensen", ID=113, Scores = new List<int>{88, 94, 65, 91}},
            };
    
            // Create the query.
            var studentsToXML = new XElement("Root",
                from student in students
                let scores = string.Join(",", student.Scores)
                select new XElement("student",
                           new XElement("First", student.First),
                           new XElement("Last", student.Last),
                           new XElement("Scores", scores)
                        ) // end "student"
                    ); // end "Root"
    
            // Execute the query.
            Console.WriteLine(studentsToXML);
    
            // Keep the console open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }

    此代码生成以下 XML 输出:

    <Root>  
      <student>  
        <First>Svetlana</First>  
        <Last>Omelchenko</Last>  
        <Scores>97,92,81,60</Scores>  
      </student>  
      <student>  
        <First>Claire</First>  
        <Last>O'Donnell</Last>  
        <Scores>75,84,91,39</Scores>  
      </student>  
      <student>  
        <First>Sven</First>  
        <Last>Mortensen</Last>  
        <Scores>88,94,65,91</Scores>  
      </student>  
    </Root>
  • 相关阅读:
    云架构师进阶攻略(1)
    针对云主机卡死问题的定位分析方法
    让App飞久一点
    OC静态代码检查实战
    PAT 1010. 一元多项式求导
    PAT 1009. 说反话
    PAT 1008 数组元素循环右移问题
    PAT 1007. 素数对猜想
    PAT 1006 换个格式输出整数
    PAT 1005 继续(3n+1)猜想
  • 原文地址:https://www.cnblogs.com/wangyihome/p/10341733.html
Copyright © 2011-2022 走看看