哈哈,隔了一个星期,再怎么样都要发一篇,要多看书啊,书不能停~~~

  • 使用where子句进行过虑

  where子句的语法格式如下:where 过虑表达式

  例子:新建一个珠宝类,如下:

 class Jewellery
{
/// <summary>
/// 珠宝类型
/// <list type="Ring">戒指</list>
/// <list type="Necklace">项链</list>
/// <list type="Bracelet">手链</list>
/// </summary>
public enum JewelleryType
{
Ring,
Necklace,
Bracelet
}
/// <summary>
/// 当前珠宝状态
/// <list type="Stock">存货</list>
/// <list type="Repair">修理中</list>
/// <list type="Sold">已售出</list>
/// </summary>
public enum JewelleryState
{
Stock,
Repair,
Sold
}
public JewelleryType Type { get; set; }
public double Price { get; set; }
public JewelleryState State { get; set; }
}

  再我们使用一个List来做容器,通过LINQ来过虑。

 List<Jewellery> list = new List<Jewellery>()
{
new Jewellery() {Type=Jewellery.JewelleryType.Bracelet,State=Jewellery.JewelleryState.Repair,Price= },
new Jewellery() {Type=Jewellery.JewelleryType.Necklace,State=Jewellery.JewelleryState.Sold,Price= },
new Jewellery() {Type=Jewellery.JewelleryType.Ring,State=Jewellery.JewelleryState.Stock,Price= },
new Jewellery() {Type=Jewellery.JewelleryType.Necklace,State=Jewellery.JewelleryState.Sold,Price= },
new Jewellery() {Type=Jewellery.JewelleryType.Bracelet,State=Jewellery.JewelleryState.Stock,Price= },
new Jewellery() {Type=Jewellery.JewelleryType.Ring,State=Jewellery.JewelleryState.Repair,Price= }
}; //查找价格大于300的手链
var result = from item in list
where item.Price > && item.Type == Jewellery.JewelleryType.Bracelet
select item;
//转换为list.Where(item => item.Price > 300).Where(item => item.Type == Jewellery.JewelleryType.Bracelet);
Console.WriteLine(result.Count()); //记录当前正在修理中的珠宝总值
var result1 = (from item in list
where item.State == Jewellery.JewelleryState.Repair
select item).Sum(item => item.Price);
//转换为list.Where(item => item.State == Jewellery.JewelleryState.Repair).Sum(item => item.Price);
Console.WriteLine(result1); Console.ReadKey();
  • 退化的查询表达式
 var resutl2 = from item in list
select item;
//这个就是所谓的退化表达式,编译器会故意生成一个对Select方法的调用,即使它什么都没有做,但result2和list有很大的不同,
//两个序列返回的数据是相同的,但是Select方法的结果只是数据项的序列,而不是数据源本身。查询表达式的结果和源数据永远不会是同一个对象
//当有其它的操作的时候,就不用为编译器保留一个"空操作"Select子句
  • 使用orderby子句进行排序
 //按价格排序,从大到小
var resutl3 = from item in list
orderby item.Price descending
select item;
//转换为list.OrderByDescending(item => item.Price);
 //先用价格再按状态排序
var result4 = from item in list
orderby item.Price, item.State
select item;
  • let子句

  let子句只不过引入一个新的范围变量,它的值是基于其它范围变量,语法格式:let 标识符 = 表达式

 //货品是用RMB的,现在使用HK来记录,使用投影返回匿名对象的序列
var result5 = from item in list
let hk = item.Price / 0.8
select new { hk = hk, item = item };

  let操作符对一个表达式进行求值,并引入新的范围变量

  • 连接

  相应于数据库中的概念,使用两张表,这里是使用两个序列,通过匹配两者之间的数据行来创建结果。

  1. 使用join子句的内连接

  内连接涉及两个序列。一个键选择器表达式应用于第1个序列的每一个元素,另外一个键选择器(可能完全不同)应用于第二个序列的每一个元素。连接的结果是一个包含所有配对元素的序列,配对的规则是第1个元素的键与第2个元素的键相同。

  连接的格式:join 右边序列元素 in 右边序列

        on 左边序列元素的key equals 右边序列元素的key

 /// <summary>
/// 用于存放珠宝的盒子
/// </summary>
class Box
{
/// <summary>
/// 盒子有一个珠宝类型的属性,与要放的珠宝类型一致
/// </summary>
public Jewellery.JewelleryType jewelleryType { get; set; }
public string BoxName { get; set; }
}
 //打印每个珠宝存放的盒子,珠宝的状态要是存货
var result6 = from box in boxList
join item in list
on box.jewelleryType equals item.Type
where item.State == Jewellery.JewelleryState.Stock
select new { BoxName = box.BoxName, Price = item.Price }; result6.ToList().ForEach(item => Console.WriteLine("位置:" + item.BoxName + ";" + "价格:" + item.Price));

  结果如下

  可见在box1中放了一件价格为500的珠宝,在box3中放着一个价格为300的珠宝。这里作为两个序列的key的是珠宝的类型Jewellery.JewelleryType

  请斧正。

21.C#序列过虑、排序、let子句和连接(十一章11.3-11.5)的更多相关文章

  1. CPrimerPlus第十一章中的“选择排序算法”学习

    C Primer Plus第十一章字符串排序程序11.25中,涉及到“选择排序算法”,这也是找工作笔试或面试可能会遇到的题目,下面谈谈自己的理解. 举个例子:对数组num[5]={3,5,2,1,4} ...

  2. Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

    继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...

  3. 重排序列 & 拓扑排序

    http://bookshadow.com/weblog/2016/10/30/leetcode-sequence-reconstruction/ 这道题目,检查重排的序列是否一致. 用了拓扑排序. ...

  4. 【技术累积】【点】【java】【21】序列化二三事

    基础概念 把对象等转为二进制进行传输的是序列化,反之为反序列化: 应用场景一般为读写文件,传输数据/接口调用: Externalizable和Serializable java的序列化方式有两种: S ...

  5. 8大排序算法图文讲解 分类: Brush Mode 2014-08-18 11:49 78人阅读 评论(0) 收藏

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...

  6. 【字符串排序】n个数连接得到最小或最大的多位整数

    题目 描述:设有n个正整数,将它们依次连成在一排,组成一个多位数,现在要求可能组成的多位数中最大的多位数是什么? 例如:n=3时,3个整数13,312,343连成的最大多位数为:343-312-13. ...

  7. getDate() 获取时间 如2018年09月21日 11:32:11

    function p(s) { return s < 10 ? '0' + s: s;} function getDate() { var myDate = new Date(); //获取当前 ...

  8. MySQL-5.7.21非图形化下载、安装、连接问题记录

    1.安装包下载链接:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip 官网:https://www.mysql.co ...

  9. 21.centos7基础学习与积累-007-远程连接

    从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 IP地址: 互联网上的计算机 都会有一个唯一的32位的地址,ip地址,我们访问服务器 ...

随机推荐

  1. js模板

    作用 适合用于定义模板(模板容器),不解析(渲染/执行). 为什么这样使用 在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').app ...

  2. hdu String Problem(最小表示法入门题)

    hdu 3374 String Problem 最小表示法 view code#include <iostream> #include <cstdio> #include &l ...

  3. Python中的库使用之一 PIL

    先上代码:本文主要工给自己参考,在需要的时候直接搜索查找就行了,不想看没有实际运行例子的文档,当参考完这部分还哦未能解决问题在参考PIL的相关文档! Skip to content This repo ...

  4. beeline vs hive cli

    近期,大数据开发环境升级为cloudera 5.3. 配套的hive版本升级为0.13.1.可以使用心仪已久的分析开窗函数了.但在使用的过程中发现一些问题,仅记于此. 1.在使用hive命令的时候,发 ...

  5. struts2 基本用法

    Struts2必需库: commons-fileupload.jar.commons-io-1.3.2.jar.freemarker-2.3.16.jar.javassist-3.7.ga.jar.o ...

  6. ZooKeeper系列4:ZooKeeper API简介及编程

    问题导读: 1.ZooKeeper API 共包含几个包? 2.如何使用ZooKeeper API 创建zookeeper应用程序? 1)ZooKeeper API 简介   ZooKeeper AP ...

  7. [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  8. 3D跑酷遇到的问题

    前言 项目名称:3D跑酷项目 写作目地:使用Asset Server进行多人协作开发过程中,记录遇到的问题 问题1:UIAtlas无法自动更新 描述:NGUI的Atlas图集(图片)无法自动更新 后果 ...

  9. 什么是Activity

    Activity 的生命周期是被以下的函数控制的.public class Activity extends ApplicationContext {      protected void onCr ...

  10. MongoDB学习(三)数据导入导出及备份恢复

    这几天想着公司要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下 ...