热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DataTransformationswithLINQ(第三章使用linq进行数据转换(加工))

LINQ不仅仅可以用来获得数据。他也是一个强大的数据转换加工工具。使用linq可以对数据进行排行,分组等。可以把多个最初的结果合并成一个结果输出。也可以吧一个结果分成多个部分(比如吧一个

LINQ不仅仅可以用来获得数据。他也是一个强大的数据转换加工工具。使用linq可以对数据进行排行,分组等。可以把多个最初的结果合并成一个结果输出。也可以吧一个结果分成多个部分(比如吧一个表中的部分字段进行输出)。还可以吧结果转换为xml等等

 一排序和分组

排序可能是大家常用的最简单的数据操作方法了。在linq中可以使用orderby从句才执行排序。这没什么好说的。大家看看列子就知道了。和sqlserver排序没什么区别(cust是一个表。name是他的字段。是字符类型)

var query = from cust in Customer
            orderby cust.Name
            select cust;
还有个分组
var query = from cust in Customer
            group cust by cust.Name
这些东西和sqlserver是一致的,如果不明白还是看sqlserver的帮助比较好些。
二。将多个输入数据组合成一个输出结果
(翻译可能不准,其实就是sql中join的应用的。将多个表通过join on连链接然后输出)
先建立两个类(我认为就是模拟两个数据表)
class Address
    {
        public int ID {get;set;}
        public string Street {get;set;}
        public string City {get;set;}
    }
class Student
{
    public string First { get; set; }
    public string Last {get; set;}
    public int ID { get; set; }
    public List Scores;
}
然后是填充数据。也就是创建数据源
// Create the first data source
List
addresses = new List
() { new Address {ID=111, Street="123 Main Street", City="Seattle"}, new Address {ID=112, Street="124 Main Street", City="Redmond"}, new Address {ID=113, Street="125 Main Street", City="Lake City"}, new Address {ID=114, Street="126 Main Street", City="North Bend"}, new Address {ID=115, Street="127 Main Street", City="Issaquah"}, new Address {ID=116, Street="129 Main Street", City="Tacoma"} }; // Create the second data source List students = new List() { new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List {97, 92, 81, 60}}, new Student {First="Claire", Last="O’Donnell", ID=112, Scores= new List {75, 84, 91, 39}}, new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List {88, 94, 65, 91}}, };
开始创建查询
// Create the query.
var query = from student in students
            join address in addresses on student.ID equals address.ID
            select new { student.Last, student.First, address.City };
执行查询
// Execute the query.
foreach (var s in query)
    Console.WriteLine(s.First + " " + s.Last + ", " + s.City);  
三返回结果数据的子集或元素
(类似返回一个表的某个字段)
第一个方法就是返回结果的对象的一个字段或元素
var query = from cust in Customers
            select cust.City;
第二个方法创建一个对象包含要返回的一个或多个字段对象或元素。(其实后面是一个表达式而已)
var query = from cust in Customer
            select new {Name = cust.Name, City = cust.City};

四吧内存中的数据转换为xml(Transforming in-Memory Objects into XML)

linq可以把内存中数据。数据库。ado.net,xml流和文档。转换为xml

// Create the data source.
List students = new List()
{
    new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores = new List{97, 92, 81, 60}},
    new Student {First="Claire", Last="O’Donnell", ID=112, Scores = new List{75, 84, 91, 39}},
    new Student {First="Sven", Last="Mortensen", ID=113, Scores = new List{88, 94, 65, 91}},
};

// Create the query.
var query = new XElement("Root",
    from student in students
    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("First", student.First),
               new XElement("Last", student.Last),
               new XElement("Scores", x)
            ) // end "student"
        ); // end "Root"

// Execute the query.
Console.WriteLine(query);

结果:


  
    Svetlana
    Omelchenko
    97,92,81,60
  
  
    Claire
    O'Donnell
    75,84,91,39
  
  
    Sven
    Mortensen
    88,94,65,91
  
五:Performing Operations on Source Elements(对源对象进行操作)
// Data source.
double[] radii = { 1, 2, 3 };

// Query.
IEnumerable query =
    from rad in radii
    select String.Format("Area = {0}", (rad * rad) * 3.14);

// Query execution. 
foreach (string s in query)
    Console.WriteLine(s);
这个列子的意思我认为就是可以直接对源数据结果进行操作。是在他们返回结果出来之前进行的。
 

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。


推荐阅读
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
author-avatar
黄俊毅伶云政星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有