LINQ 101——约束、投影、排序

时间:2022-09-08 23:35:12

什么是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字符串搜索条件&comma;排序条件-linq动态查询语句 Dynamic LINQ

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

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

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

  9. mongodb的Limit&vert;skip&vert;投影&vert;排序&vert;消除重复

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

随机推荐

  1. javascript的地基

    有了良好的基础,才能在其上创造有价值的东西. 回顾一下以往自己javascript应用的开发经历,似乎很少去思考和总结js的运行机制.现在我就来整理整理 1. 以<编译原理>的一段话开头: ...

  2. Distinct&lt&semi;TSource&gt&semi;&lpar;IEqualityComparer&lt&semi;TSource&gt&semi; comparer&rpar; 根据列名来Distinct

    1. DistinctEqualityComparer.cs public class DistinctEqualityComparer<T, V> : IEqualityComparer ...

  3. Python学习入门基础教程&lpar;learning Python&rpar;--3&period;3&period;3 Python逻辑关系表达式

    在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...

  4. pull类型消息中间件-消息服务端&lpar;三&rpar;

    部署架构 消息存储 存储结构 MetaQ的存储结构是一种物理队列+逻辑队列的结构.如下图所示: Producer生产消息,根据消息的topic选择topic对应某一个分区,然后发送到这个分区对应的Br ...

  5. YDKJS&colon;作用域与闭包

    作用域与闭包 什么是作用域 编译器 理解作用域 嵌套的作用域 词法作用域 词法分析时 欺骗词法作用域 函数与块作用域 函数中的作用域 隐藏标识符于普通作用域 函数作为作用域 块作为作用域 提升 先有鸡 ...

  6. AppScan扫描结果分析及工具栏使用

    Appscan的窗口大概分三个模块,Application Links(应用链接), Security Issues(安全问题), and Analysis(分析) Application Links ...

  7. Hive 时间日期处理总结

    最近用hive比较多,虽然效率低,但是由于都是T+1的业务模式.所以也就不要求太多了,够用就行.其中用的吧比较多就是时间了,由于大数据中很多字段都不是标准的时间类型字段,所以期间涉及了很多的时间日期字 ...

  8. List里边存放Object对象获取方式

    if (tableListt != null && tableListt.size() > 0) { for (int i = 0; i < tableListt.size ...

  9. form组件&plus;cookie&plus;session总结

    1.forms 组件 -数据校验功能 1.定义 -新建一个py文件 -导入from django import forms -写一个类继承 forms.Form -把你需要校验的(字段的条件)属性写到 ...

  10. JSP中三大指令

    JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的.  JSP中的指令共有三个:page. ...