C# LINQ的基本使用方法示例
LINQ是什么?
LINQ是Language Integrated Query(语言集成查询的缩写), 微软官方 对其的描述:
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。
基本用法是什么?
(我目前也只会最基本的用法。。)
LINQ查询操作由三个不同的操作组成:
- 获取数据源
- 创建查询
- 执行查询
下面我将用我学习时用的一个小例子来演示。
有两个数据源:武林高手的集合和武林绝学的集合。
我用的是两个集合,实际上不只是集合可以作为数据源
微软官方文档提到:
上例中,数据源是一个数组,因此它隐式支持泛型IEnumerable<T> 接口。 这一事实意味着该数据源可以用 LINQ 进行查询。
说回我的例子,我实现了两个类:
MatialArtsMaster 表示武林高手:
//武林高手 class MatialArtsMaster { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Menpai { get; set; } public string Kongfu { get; set; } public int Level { get; set; } public override string ToString() { return string.Format("id:{0},name:{1},age:{2},menpai:{3},kongfu:{4},level:{5}", this.ID, this.Name, this.Age, this.Menpai, this.Kongfu, this.Level); } }
Kongfu 表示武林绝学:
//武学 class Kongfu { public int Id { get; set; } public string Name { get; set; } public int Power { get; set; } public Kongfu() { } public Kongfu(int id, string name, int power) { Id = id; Name = name; Power = power; } public override string ToString() { return string.Format("Id:{0},Name:{1},Power:{2}", this.Id, this.Name, this.Power); } }
然后填充两个集合:
{ var MasterList = new List<MatialArtsMaster> { new MatialArtsMaster(){ID=001,Name="黄蓉",Age=18,Menpai="丐帮",Kongfu="打狗棒法",Level=9}, new MatialArtsMaster(){ID=002,Name="洪七公",Age=70,Menpai="丐帮",Kongfu="打狗棒法",Level=10}, new MatialArtsMaster(){ID=003,Name="郭靖",Age=22,Menpai="丐帮",Kongfu="降龙十八掌",Level=10}, new MatialArtsMaster(){ID=004,Name="任我行",Age=50,Menpai="明教",Kongfu="葵花宝典",Level=1}, new MatialArtsMaster(){ID=005,Name="东方不败",Age=35,Menpai="明教",Kongfu="葵花宝典",Level=10}, new MatialArtsMaster(){ID=006,Name="林平之",Age=23,Menpai="华山",Kongfu="葵花宝典",Level=7}, new MatialArtsMaster(){ID=007,Name="岳不群",Age=50,Menpai="华山",Kongfu="岳不群",Level=8}, new MatialArtsMaster(){ID=008,Name="令狐冲",Age=23,Menpai="华山",Kongfu="独孤九剑",Level=10}, new MatialArtsMaster(){ID=009,Name="梅超风",Age=23,Menpai="梅花岛",Kongfu="九阴真经",Level=8}, }; var kungfuList = new List<Kongfu>() { new Kongfu(){Id=1,Name="打狗棒法",Power=90}, new Kongfu(){Id=2,Name="降龙十八掌",Power=95}, new Kongfu(){Id=3,Name="葵花宝典",Power=100}, new Kongfu(){Id=4,Name="独孤九剑",Power=100}, new Kongfu(){Id=5,Name="九阴真经",Power=100}, };
接下来就是查询了,基本的LINQ查询操作主要通过 from , in , select , where 关键字实现。例如:
查询修炼 葵花宝典 的武林高手:
var res = from master in MasterList where master.Kongfu == "葵花宝典" select master; foreach(var temp in res) { Console.WriteLine(temp.ToString()); } //id: 4,name: 任我行,age: 50,menpai: 明教,kongfu: 葵花宝典,level: 1 //id: 5,name: 东方不败,age: 35,menpai: 明教,kongfu: 葵花宝典,level: 10 //id: 6,name: 林平之,age: 23,menpai: 华山,kongfu: 葵花宝典,level: 7
查询所有武林高手的名字:
var res = from master in MasterList select master.Name; foreach(var temp in res) { Console.WriteLine(temp.ToString()); } //黄蓉 //洪七公 //郭靖 //任我行 //东方不败 //林平之 //岳不群 //令狐冲 //梅超风
微软官方将 from 关键字后的那个变量称为 范围变量 :
范围变量就像 foreach 循环中的迭代变量,但查询表达式中不会真正发生迭代。 当执行查询时,范围变量将充当对 customers 中每个连续的元素的引用。
这种写法写起来和SQL语句十分相似,逻辑功能也基本上一样,所以如果已经会SQL的话会很容易理解。
扩展方法
除了这样的标准写法,还可以通过数据源的扩展方法来实现LINQ查询。最简单易懂的一个方法是 where() 方法。
如要查询所有修炼等级大于8的武林高手:
var res = MasterList.Where(master => master.Level > 8); foreach(var temp in res) { Console.WriteLine(temp.ToString()); } //id: 1,name: 黄蓉,age: 18,menpai: 丐帮,kongfu: 打狗棒法,level: 9 //id: 2,name: 洪七公,age: 70,menpai: 丐帮,kongfu: 打狗棒法,level: 10 //id: 3,name: 郭靖,age: 22,menpai: 丐帮,kongfu: 降龙十八掌,level: 10 //id: 5,name: 东方不败,age: 35,menpai: 明教,kongfu: 葵花宝典,level: 10 //id: 8,name: 令狐冲,age: 23,menpai: 华山,kongfu: 独孤九剑,level: 10
扩展方法还有很多,如 Select 、 SelectMany 、 Join 和 Orderby 。他们的具体用法可参阅微软官方文档-扩展方法
)。
最后
LINQ是一项强大的技术,我才了解了一点点LINQ的知识(甚至可能还有错误,如果有请一定指正!),保持学习才是长久之道。
总结
到此这篇关于C# LINQ的基本使用方法的文章就介绍到这了,更多相关C# LINQ基本用法内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25