什么是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;

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

多个Where 条件且筛选

 var query = from item in sources
where (字段1的条件1) || (字段1的条件2)
where (字段2的条件1) || (字段2的条件2)
select new Entity .... 如
var query = from item in sources
where (string.IsNullOrEmpty(txtSearch.Text.Trim())) || (item.Filed1.Contains(txtSearch.Text.Trim()))
where (string.IsNullOrEmpty(txtFilter.Text.Trim())) || (item.Filed2.Contains(txtFilter.Text.Trim()))
...
select new Entity ....

二、投影——select

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

 int[] numbers = { , , , , , ,- };

 var numsPlusOne =
from n in numbers
select n + ; Console.WriteLine("整数+1:");
foreach (var num in numsPlusOne)
{
Console.WriteLine(num);
}

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

 public class Config
{
public Guid ID { get; set; }
public string Name { get; set; }
public string Remark { get; set; } Config() { } public static List<Config> GetConfigs()
{
return new List<Config>
{
new Config{ ID=Guid.NewGuid(), Name="XX1号",Remark="Remark1号"},
new Config{ ID=Guid.NewGuid(), Name="XX2号",Remark="Remark2号"},
new Config{ ID=Guid.NewGuid(), Name="XX3号",Remark="Remark3号"}
};
}
} static void Linq3()
{
var source = Config.GetConfigs();
var query = from item in source
select item.Name;
foreach (var c in query)
{
Console.WriteLine(c);
}
}

例3:数组下标转换

 static void Linq4()
{
int[] numbers = { , , , , , , , , , };
string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; var textNums =
from n in numbers
select strings[n]; Console.WriteLine("数组下标转换");
foreach (var s in textNums)
{
Console.WriteLine(s);
}
}

例3:匿名类型,大小写

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

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

 public class Dto
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
} static void Linq6()
{
var source = Config.GetConfigs();
var query = from item in source
select new Dto { Field1 = item.ID.ToString(), Field2 = item.Name, Field3 = item.Remark };
foreach (var item in query)
{
Console.WriteLine("{0} {1} {2}", item.Field1, item.Field2, item.Field3);
}
}

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

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

 public class Guest
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; } /// <summary>
/// 年龄
/// </summary>
public int Age { get; set; } /// <summary>
/// 电话表
/// </summary>
public List<string> TelTable { get; set; }
} static void Linq8()
{
var source = new List<Guest>
{
new Guest{ Name="张三",Age=,TelTable=new List<string>{"010-123456",""}},
new Guest{ Name="李四",Age=,TelTable=new List<string>{"021-123456",""}},
new Guest{ Name="王五",Age=,TelTable=new List<string>{"022-123456",""}}
};
// 找电话簿中是021区号的客户
var query = from guest in source
from tel in guest.TelTable
where tel.Contains("021-")
select guest; foreach (var guest in query)
{
Console.WriteLine("{0} 年龄:{1}", guest.Name, guest.Age);
foreach (var tel in guest.TelTable) { Console.WriteLine(" 电话:{0}",tel); }
}
}

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

 static void Linq7()
{
int[] numbersA = { , , , , , , };
int[] numbersB = { , , , , }; var pairs =
from a in numbersA
from b in numbersB
where a < b
select new { a, b }; Console.WriteLine("交叉连接 a < b:");
foreach (var pair in pairs)
{
Console.WriteLine("{0} 小于 {1}", pair.a, pair.b);
}
}

三、排序

orderby 排序字段

orderby 排序字段 descending

Thenby(orderby 多个排序字段)

ThenByDescending  (orderby 多个排序字段 descending)

例1:orderby 排序字段

 static void Linq9()
{
string[] words = { "cherry", "apple", "blueberry" }; var sortedWords =
from w in words
orderby w
select w; Console.WriteLine("单词排序 order by 单个排序字段:");
foreach (var w in sortedWords)
{
Console.WriteLine(w);
}
}

例2:orderby 排序字段 descending

 static void Linq10()
{
string[] words = { "cherry", "apple", "blueberry" }; var sortedWords =
from w in words
orderby w descending
select w; Console.WriteLine("单词排序 order by 单个排序字段 从大到小:");
foreach (var w in sortedWords)
{
Console.WriteLine(w);
}
}

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

 static void Linq11()
{
string[] words = { "cherry", "appppp", "cherryo", "appppppple", "blueberry" }; // 先按名称排,再按长度排序
var sortedWords =
from w in words
orderby w,w.Length
select w; Console.WriteLine("单词排序 ThenBy 多个排序字段");
foreach (var w in sortedWords)
{
Console.WriteLine(w);
}
}

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

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

 static void Linq12()
{
string[] words = { "cherry", "appppp", "cherryo", "appppppple", "blueberry" }; // 先按名称排,再按长度排序
var sortedWords =
from w in words
orderby w descending, w.Length descending
select w; Console.WriteLine("单词排序 ThenBy 多个排序字段");
foreach (var w in sortedWords)
{
Console.WriteLine(w);
}
}

本文代码: 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. 基于WCF大型分布式系统的架构设计

    在大型系统中应用中,一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或多个表.而在架构设计中,各个功能模块相互之间的交互点 越统 ...

  2. ASP.NET MVC 中将FormCollection与实体间转换方法 (转)

    将Action动作中传递的FormCollection转变成对应的实体,可以使用Controller的TryUpdateModel()方法. [HttpPost] public ActionResul ...

  3. cssText设置css样式

    js中用cssText设置css样式 (2012-08-21 10:40:22) 转载▼ 标签: js   如果网页中一个 id为“no”的标签,暂且当div标签来tell:想要在js中设置这个div ...

  4. Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1728  Solved: 649[Submit][Statu ...

  5. 28个Unix/Linux的命令行神器

    下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具都非常不错,希望每个人都知道 ...

  6. ubuntu14.04 swap not avalible交换分区不能使用

    系统最近特别卡,打开"System monitor"中的resource发现"swap not avalibe".原来系统每交换分区. 我的是笔记本电脑,存储空间有限.首先我下载磁盘分区工具Gpart ...

  7. ambari的重新安装

    ambari是什么呢? 这里我简单说一下ambari的目的,他的目的就是简化hadoop集群的安装和管理.对于安装简化到什么地步呢?只需要几个命令,在页面上配置几个参数,几百几千个节点的集群就能安装成 ...

  8. Python中的引用的使用注意

    关于Python中的引用的一些使用注意 在python中,在创建一个对象并给它赋予一个变量时,这个赋予的变量仅仅是一个引用它所代表的对象.也就是说新创建的对象只是指向计算机中储存那个对象的内存. 比如 ...

  9. hdoj 1862 EXCEL排序

    EXCEL排序 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  10. 使用C++的开源序列化(Serialization)库cereal

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用C++的开源序列化(Serialization)库cereal.