什么是LINQ:LINQ 是一组 .NET Framework 扩展模块集合,内含语言集成查询、集合以及转换操作。它使用查询的本机语言语法来扩展 C# 和 Visual Basic,并提供利用这些功能的类库。

什么是LINQ 101:是学习LINQ的不错的资源(下载地址:http://pan.baidu.com/s/1ntE74NJ),当初我也是看LINQ101来熟悉LINQ的。现把我当时的学习笔记整理出来

Restriction (约束)
Projection (投影)
Ordering (排序)
Partitioning (分区)
Join
Aggregate(聚合)
Grouping(分组)
Set(集合)
Conversion(转换)
Element(元素操作)

本篇文章介绍前三个

一、 约束 ——where

var query = from item in [集合] where [item满足的条件] select item;

  1. int[] numbers = { , , , , , - };
  2. var query = from n in numbers
  3. where n % ==
  4. select n;
  5. Console.WriteLine("被3整除的数:");
  6. foreach (var num in numbers)
  7. {
  8. Console.WriteLine(num);
  9. }

多个Where 条件且筛选

  1. var query = from item in sources
  2. where (字段1的条件1) || (字段1的条件2)
  3. where (字段2的条件1) || (字段2的条件2)
  4. select new Entity ....
  5.  

  6. var query = from item in sources
  7. where (string.IsNullOrEmpty(txtSearch.Text.Trim())) || (item.Filed1.Contains(txtSearch.Text.Trim()))
  8. where (string.IsNullOrEmpty(txtFilter.Text.Trim())) || (item.Filed2.Contains(txtFilter.Text.Trim()))
  9. ...
  10. select new Entity ....

二、投影——select

例1:让数组中每个数都加1

  1. int[] numbers = { , , , , , ,- };
  2.  
  3. var numsPlusOne =
  4. from n in numbers
  5. select n + ;
  6.  
  7. Console.WriteLine("整数+1:");
  8. foreach (var num in numsPlusOne)
  9. {
  10. Console.WriteLine(num);
  11. }

例2:选取某类中一个属性

  1. public class Config
  2. {
  3. public Guid ID { get; set; }
  4. public string Name { get; set; }
  5. public string Remark { get; set; }
  6.  
  7. Config() { }
  8.  
  9. public static List<Config> GetConfigs()
  10. {
  11. return new List<Config>
  12. {
  13. new Config{ ID=Guid.NewGuid(), Name="XX1号",Remark="Remark1号"},
  14. new Config{ ID=Guid.NewGuid(), Name="XX2号",Remark="Remark2号"},
  15. new Config{ ID=Guid.NewGuid(), Name="XX3号",Remark="Remark3号"}
  16. };
  17. }
  18. }
  19.  
  20. static void Linq3()
  21. {
  22. var source = Config.GetConfigs();
  23. var query = from item in source
  24. select item.Name;
  25. foreach (var c in query)
  26. {
  27. Console.WriteLine(c);
  28. }
  29. }

例3:数组下标转换

  1. static void Linq4()
  2. {
  3. int[] numbers = { , , , , , , , , , };
  4. string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
  5.  
  6. var textNums =
  7. from n in numbers
  8. select strings[n];
  9.  
  10. Console.WriteLine("数组下标转换");
  11. foreach (var s in textNums)
  12. {
  13. Console.WriteLine(s);
  14. }
  15. }

例3:匿名类型,大小写

  1. static void Linq5()
  2. {
  3. string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };
  4. var query = from word in words
  5. select new { Upper = word.ToUpper(), Lower = word.ToLower() };
  6. foreach (var item in query)
  7. {
  8. Console.WriteLine("大写: {0} 小写: {1}",item.Upper,item.Lower);
  9. }
  10. }

例4:将投影的属性放到一个类中

  1. public class Dto
  2. {
  3. public string Field1 { get; set; }
  4. public string Field2 { get; set; }
  5. public string Field3 { get; set; }
  6. }
  7.  
  8. static void Linq6()
  9. {
  10. var source = Config.GetConfigs();
  11. var query = from item in source
  12. select new Dto { Field1 = item.ID.ToString(), Field2 = item.Name, Field3 = item.Remark };
  13. foreach (var item in query)
  14. {
  15. Console.WriteLine("{0} {1} {2}", item.Field1, item.Field2, item.Field3);
  16. }
  17. }

例5:筛选 加where条件参见 where 例1

例6:复合from子句(选取座机号码区号为021的客户信息)

  1. public class Guest
  2. {
  3. /// <summary>
  4. /// 姓名
  5. /// </summary>
  6. public string Name { get; set; }
  7.  
  8. /// <summary>
  9. /// 年龄
  10. /// </summary>
  11. public int Age { get; set; }
  12.  
  13. /// <summary>
  14. /// 电话表
  15. /// </summary>
  16. public List<string> TelTable { get; set; }
  17. }
  18.  
  19. static void Linq8()
  20. {
  21. var source = new List<Guest>
  22. {
  23. new Guest{ Name="张三",Age=,TelTable=new List<string>{"010-123456",""}},
  24. new Guest{ Name="李四",Age=,TelTable=new List<string>{"021-123456",""}},
  25. new Guest{ Name="王五",Age=,TelTable=new List<string>{"022-123456",""}}
  26. };
  27. // 找电话簿中是021区号的客户
  28. var query = from guest in source
  29. from tel in guest.TelTable
  30. where tel.Contains("021-")
  31. select guest;
  32.  
  33. foreach (var guest in query)
  34. {
  35. Console.WriteLine("{0} 年龄:{1}", guest.Name, guest.Age);
  36. foreach (var tel in guest.TelTable) { Console.WriteLine(" 电话:{0}",tel); }
  37. }
  38. }

例7:多个 form 子句(交叉连接)

  1. static void Linq7()
  2. {
  3. int[] numbersA = { , , , , , , };
  4. int[] numbersB = { , , , , };
  5.  
  6. var pairs =
  7. from a in numbersA
  8. from b in numbersB
  9. where a < b
  10. select new { a, b };
  11.  
  12. Console.WriteLine("交叉连接 a < b:");
  13. foreach (var pair in pairs)
  14. {
  15. Console.WriteLine("{0} 小于 {1}", pair.a, pair.b);
  16. }
  17. }

三、排序

orderby 排序字段

orderby 排序字段 descending

Thenby(orderby 多个排序字段)

ThenByDescending  (orderby 多个排序字段 descending)

例1:orderby 排序字段

  1. static void Linq9()
  2. {
  3. string[] words = { "cherry", "apple", "blueberry" };
  4.  
  5. var sortedWords =
  6. from w in words
  7. orderby w
  8. select w;
  9.  
  10. Console.WriteLine("单词排序 order by 单个排序字段:");
  11. foreach (var w in sortedWords)
  12. {
  13. Console.WriteLine(w);
  14. }
  15. }

例2:orderby 排序字段 descending

  1. static void Linq10()
  2. {
  3. string[] words = { "cherry", "apple", "blueberry" };
  4.  
  5. var sortedWords =
  6. from w in words
  7. orderby w descending
  8. select w;
  9.  
  10. Console.WriteLine("单词排序 order by 单个排序字段 从大到小:");
  11. foreach (var w in sortedWords)
  12. {
  13. Console.WriteLine(w);
  14. }
  15. }

例3:Thenby(orderby 多个排序字段)

  1. static void Linq11()
  2. {
  3. string[] words = { "cherry", "appppp", "cherryo", "appppppple", "blueberry" };
  4.  
  5. // 先按名称排,再按长度排序
  6. var sortedWords =
  7. from w in words
  8. orderby w,w.Length
  9. select w;
  10.  
  11. Console.WriteLine("单词排序 ThenBy 多个排序字段");
  12. foreach (var w in sortedWords)
  13. {
  14. Console.WriteLine(w);
  15. }
  16. }

例4:ThenByDescending  (orderby 多个排序字段 descending)

注意主要条件和次要的升降序不传递

  1. static void Linq12()
  2. {
  3. string[] words = { "cherry", "appppp", "cherryo", "appppppple", "blueberry" };
  4.  
  5. // 先按名称排,再按长度排序
  6. var sortedWords =
  7. from w in words
  8. orderby w descending, w.Length descending
  9. select w;
  10.  
  11. Console.WriteLine("单词排序 ThenBy 多个排序字段");
  12. foreach (var w in sortedWords)
  13. {
  14. Console.WriteLine(w);
  15. }
  16. }

本文代码: http://pan.baidu.com/s/1dDnJ0tV

LINQ 101——约束、投影、排序的更多相关文章

  1. LINQ 101——分组、Set、转换、Element

    一.Grouping(分组) 例1:对于0-9数按被3整除的结果分组 代码: static void Linq1() { , , , , , , , , , }; var numModBy3 = fr ...

  2. 第二章 约束和排序数据(SQL基础)

    第二章 约束和排序数据 1. 在 emp 表中选择工资介于 1500 到 2500 的员工的信息:                注意:使用 between 下边界 and 上边界时,条件包括边界值: ...

  3. 通过orderby关键字,LINQ可以实现升序和降序排序。LINQ还支持次要排序。

    通过orderby关键字,LINQ可以实现升序和降序排序.LINQ还支持次要排序. LINQ默认的排序是升序排序,如果你想使用降序排序,就要使用descending关键字. static void M ...

  4. LINQ系列:Linq to Object投影操作符

    投影是指在将序列中的元素转换为一个自定义形式的操作.投影操作符Select和SelectMany用于选择出赋予了适当功能的值.SelectMany操作符可以处理多个集合. LINQ表达式语法: 1. ...

  5. Linq查询操作之排序操作

    在Linq中排序操作可以按照一个或多个关键字对序列进行排序.其中第一个排序关键字为主要关键字,第二个排序关键字为次要关键字.Linq排序操作共包含以下5个基本的操作. 1.OrderBy操作,根据排序 ...

  6. linq扩展之动态排序

    前两天看QQ群里面,一位朋友问的问题,说在linq中怎么实现动态排序呢,自己想了半天,没有头绪,网上找了下相关的资料,看了下,收益挺多,记录下来. 之前我们没有如果不知道动态排序的方法的话,我们可能会 ...

  7. linq字符串搜索条件,排序条件-linq动态查询语句 Dynamic LINQ

    在做搜索和排序的时候,往往是前台传过来的字符串做条件,参数的数量还不定,这就需要用拼sql语句一样拼linq语句.而linq语句又是强类型的,不能用字符串拼出来. 现在好了,有个开源的linq扩展方法 ...

  8. c# linq lambda 去重,排序,取最高纪录。

    ----------------------------------------------------.对基础类型排序 方法一: 调用sort方法,如果需要降序,进行反转: List<int& ...

  9. mongodb的Limit|skip|投影|排序|消除重复

    Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 如果没有指定参数则显示集合中的所有文档 ...

随机推荐

  1. HDU 1162 Eddy's picture

    坐标之间的距离的方法,prim算法模板. Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32 ...

  2. 【性能测试】【Jmeter】学习(3)——查看测试结果

    监听器——聚合报告 聚合报告添加步骤:(右键点击每一个操作步骤--->“添 加”---->“监听器”---->“聚合报告”) Label:每个 JMeter 的 element(例如 ...

  3. 员工部门表综合查询SQL

    --数据库的表设计如下: --部门:部门编号,部门名称,地址: --员工:员工编号,员工名字,职务,管理编号,入职日期,薪资,奖金,部门编号: --创建部门表: CREATE TABLE dept( ...

  4. Suse系统用户不能登录报错

    Linux系统用户创建了user用户,使用putty登陆系统,用户为user,系统登陆报 错: Could not chdir to home directory /home/user: Permis ...

  5. input hidden用法

    之前获取数据传数据,都是写在全局变量里,今天老板告诉我说用input hidden来存,我百度了一下,确实是个好方法,记录之: 1 隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或 ...

  6. HDOJ/HDU 2352 Verdis Quo(罗马数字与10进制数的转换)

    Problem Description The Romans used letters from their Latin alphabet to represent each of the seven ...

  7. SRM 447(1-250pt, 1-500pt)

    DIV1 250 水题...略. DIV1 500 抽象题意:有一个图,指定其中亮点p1和p2,删掉途中其他的一些点,使得p1和p2最短路大于3. 解法:使得p1和p2最短路为2的点一定要删掉.然后, ...

  8. kvm 性能调优

    CPU Tuning Cache share tuning 对于物理 CPU,同一个 core 的 threads 共享 L2 Cache,同一个 socket 的 cores 共享 L3 cache ...

  9. Junit 断言 assertThat Hamcrest匹配器

    junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...

  10. Coding girl一个老程序员谈到的一个女程序员的故事

    因为有人说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件 ...