C#中Linq查询基本操作使用实例
摘要:本文介绍Linq查询基本操作(查询关键字)
- from 子句
- where 子句
- select子句
- group 子句
- into 子句
- orderby 子句
- join 子句
- let 子句
- 复合from子句
- 在某些情况下,源序列中的每个元素本身可能是序列(集合),也可能包含序列
- 用语访问单个数据库中的内部集合
- 使用多个from字句执行连接
- 可以包含多个可从独立数据源生成补充查询的from字句
复合(顾名思义就是有多from的字句)实例:
class Program
{ static void Main(string[] args)
{
List<Student> students = new List<Student> { new Student
{
LastName="xiaogui",Scores=new List<int>{97,42,91,60}}, new Student
{
LastName="xiaozhan",Scores=new List<int>{50,92,81,60}}, new Student
{
LastName="xiaolan",Scores=new List<int>{32,32,81,90}}, new Student
{
LastName="xiaowan",Scores=new List<int>{92,22,81,60}},
}; var query = from stuent in students from score in stuent.Scores where score > 90 select new {
Last = stuent.LastName,
score
}; foreach (var student in query)//大于90分的显示出来 {
Console.WriteLine("{0} Score:{1}", student.Last, student.score);
}
Console.ReadLine();
}
}
public class Student
{ public string LastName { get; set; } public List<int> Scores { get; set; }
} public class Employee
{ public string First { get; set; } public string Last { get; set; } public int ID { get; set; }
}
执行结果: xiaogui Score:97
xiaogui Score:91
xiaozhan Score:92
xiaowan Score:92
let 关键字(使用let字句扩展范围变量)
- 创建一个可以查询自身的可枚举类型
- 使查询只能对范围变量word调用一次ToLower。
如果不使用let,则必须在where字句的每个谓词中调用ToLower
例:把每个单词开头包含a或者e的找出来
using System; using System.Linq; public class Test
{ static void Main(string[] args)
{ string[] strings = { "A penny saved is a penny earned.", "The aaxly sdj", "the pa is no" }; var query = from sentence in strings
let words = sentence.Split(' ')//用空格分割成数组 from word in words
let w = word.ToLower()//把每个字母小写 where w[0] == 'a' || w[0] == 'e' select word; foreach (var s in query)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
}
where 关键字 (筛选)
- 一个查询表达式可以包含多个where字句
例:(把包含a的找出来)
using System; using System.Linq; public class Test
{ static void Main(string[] args)
{ string[] str = { "a", "b", "c" }; var query = from s in str where s == "a" select s; foreach (var s in query)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
}
orderby 关键字 (排序)
- 在查询表达式中,orderby字句可以使返回的序列(组)按升序或降序。
- 可以指定多个键,以便执行一个或多个次要排序操作
- 默认排序顺序为升序
- 编译时,orderby字句被转换为对OrderBy方法的调用。orderby字句中的多个键被转换为ThenBy方法调用
descending 降序
ascending 升序
例1:升序
using System; using System.Linq; public class Test
{ static void Main(string[] args)
{ string[] str = { "a", "b", "c" }; var query = from s in str orderby s ascending select s;
}
}
结果为: a b c
例2:降序
using System; using System.Linq; public class Test
{ static void Main(string[] args)
{ string[] str = { "a", "b", "c" }; var query = from s in str orderby s descending select s;
}
}
结果为: c b a
group 关键字 (分组)
- group 字句返回一个IGrouping(TKey,Telement)对象序列
- 编译时,group子句被转换为对GroupBy方法的调用
(LINQ查询表达式可以以select或者Group结束) (如果想要对每个组执行附加查询操作,则可以使用into上下文关键字指定一个临时标识符,使用into时,必须继续编写该查询,并最终用一个select语句或另一 个group子句结束该查询)
例:
using System; using System.Linq; public class Test
{ static void Main(string[] args)
{ string[] str = { "aa", "bb", "cc", "dd" }; var query = from s in str
group s by s[0]
into p where p.Key == 'a' || p.Key == 'b' || p.Key == 'c' orderby p.Key descending select p.Key; foreach (var s in query)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
}
结果为: c b a
说明: group s by s[0] into p 意思是针对范围变量s用“s[0]”分组,本例中是用第一个字母分组
join 关键字 (联接)
- 使用join 子句可以将来自不同源序列并且在对象模型中没有直接关系的元素相关联
- 唯一的要求是每个源中的元素需要共享某个可以进行比较以判断是否相等的值
- join字句使用特殊的equals关键字比较指定的键是否相等
三中常见的连接类型
- 内部联接
- 分组联接
- 左外部联接
1.内部联接
var query = from a in str
join b in str2 on a.id equals b.id select new { Aname = a.name, Bname = b.name };
2.分组联接:(into 可以将join暂存起来)
var query = from a in str
join b in str2 on a.id equals b.id
into c select new {Aname=a.name,Cs=c}
3.左外部联接
- 在左外部联接中,将返回左则源序列中所有元素,即使它们在右则序列中没有匹配的元素也是如此。
- 若要在LINQ中执行左外部联接,请将DefaultifEmpty方法与分组联接结合起来,以指定要在某个左则元素不具有匹配元素时产生的默认右则元素。可以使用null作为任何引
用类型的默认值,也可以指定用户定义的默认类型。
var query = from category in categories
join prod in products on category.id equals prod.CategoryID
into prodGroup from item prodGroup.defaultifEmpty( new Product{Name=string.empty,CategoryID=0}) select new {CatName=category.Name,ProdName=item.Name}
equalse 运算符
- join 子句执行同等联接。换句话说,只能基于两个键之间的相等关系进行匹配
- 为了表明所有联接都是相等联接,join子句使用equals关键字而不是==运算符
复合键
- 使用复合键可以测试多个值是否相等
select 关键字 选择
相关文章
- MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句...2015-11-24
- C# 对XML基本操作包括读取节点的数据,添加节点。读取节点属性,修改节点属性等...2020-06-25
- 二叉树是数据结构中的树的一种特殊情况,有关二叉树的相关概念,这里不再赘述,如果不了解二叉树相关概念,建议先学习数据结构中的二叉树的知识点...2020-04-25
- 这篇文章主要介绍了Python字符串的15个基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-04
- 字段类型 1.INT[(M)] 正常大小整数类型 2.DOUBLE[(M,D)] [ZEROFILL] 正常大小(双精密)浮点数字类型 3.DATE 日期类型。支持的...2016-11-25
- pyspark是Spark对Python的api接口,可以在Python环境中通过调用pyspark模块来操作spark,这篇文章主要介绍了windowns使用PySpark环境配置和基本操作,感兴趣的可以了解一下...2021-05-17
- 以下是对C++中单链表的建立与基本操作进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-04-25
- 这篇文章主要介绍了实现二叉树的创建(先序)、递归及非递归的先、中、后序遍历...2020-04-25
- 这篇文章主要介绍了MongoDB数据库安装配置、基本操作,结合实例形式详细分析了MongoDB数据库安装配置具体步骤、相关命令与基本操作实现技巧,需要的朋友可以参考下...2020-07-11
Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
这篇文章主要介绍了Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作的相关资料,需要的朋友可以参考下...2020-06-25- SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。今天我们主要来讲解下SQLite数据库的安装以及基本操作指南...2020-07-11
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例。写了一些基本的增删改查功能,算是对该控件的基本入门。后续有时间...2013-10-13- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说一下界面和基本操作以及一些常用的快捷键,各位想知道具体信息的使用者们,那么大家就快来跟着小编一起看...2016-09-14
- MySQL学习第五天我们将针对MySQL数据库进行基本操作,创建、修改、删除数据库等一系列操作进行学习,感兴趣的小伙伴们可以参考一下...2016-06-12
- 这篇文章主要介绍了C#中Linq查询基本操作使用实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了通过LinQ查询字符出现次数的实例方法,大家参考使用吧...2020-06-25
- PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法 我用一个留言本程序作为例子,阐述PHP实现对文本数据库的数据显示、加入、修改、删...2016-11-25
- 这篇文章主要介绍了PyTorch一小时掌握之基本操作篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
- 二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将详细介绍一下C++中二叉树的实现和遍历,需要的可以参考一下...2022-03-30