C# Linq 学习笔记
刚刚学习了 Siki老师 的C#教程Linq部分,以下是笔记
需要引用命名空间
using System.Linq;
然后我们需要准备数据
武林高手类
/// <summary>
/// 武林高手类
/// </summary>
class MartialArtsMaster
{
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("{0}--{1}--{2}--{3}--{4}--{5}", ID, Name, Age, MenPai, Kongfu, Level);
}
}
武林绝学类
class Kongfu
{
public int ID { get; set; }
public string Name { get; set; }
public int Power { get; set; } public override string ToString()
{
return string.Format("{0}--{1}--{2}", ID, Name, Power);
}
}
Main方法里的武林高手列表和武林绝学列表
List<MartialArtsMaster> masterList = new List<MartialArtsMaster>()
{
new MartialArtsMaster() { ID = , Name = "黄蓉", Age = , MenPai = "丐帮", Kongfu = "打狗棒法", Level = },
new MartialArtsMaster() { ID = , Name = "洪七公", Age = , MenPai = "丐帮", Kongfu = "打狗棒法", Level = },
new MartialArtsMaster() { ID = , Name = "郭靖", Age = , MenPai = "丐帮", Kongfu = "降龙十八掌", Level = },
new MartialArtsMaster() { ID = , Name = "任我行", Age = , MenPai = "明教", Kongfu = "葵花宝典", Level = },
new MartialArtsMaster() { ID = , Name = "东方不败", Age = , MenPai = "明教", Kongfu = "葵花宝典", Level = },
new MartialArtsMaster() { ID = , Name = "林平之", Age = , MenPai = "华山", Kongfu = "葵花宝典", Level = },
new MartialArtsMaster() { ID = , Name = "岳不群", Age = , MenPai = "华山", Kongfu = "葵花宝典", Level = },
new MartialArtsMaster() { ID = , Name = "令狐冲", Age = , MenPai = "华山", Kongfu = "独孤九剑", Level = },
new MartialArtsMaster() { ID = , Name = "梅超风", Age = , MenPai = "桃花岛", Kongfu = "九阴真经", Level = },
new MartialArtsMaster() { ID = , Name = "黄药师", Age = , MenPai = "梅花岛", Kongfu = "弹指神功", Level = },
new MartialArtsMaster() { ID = , Name = "风清扬", Age = , MenPai = "华山", Kongfu = "独孤九剑", Level = },
};
List<Kongfu> kongfuList = new List<Kongfu>()
{
new Kongfu() {ID=,Name="打狗棒法",Power= },
new Kongfu() {ID=,Name="降龙十八掌",Power= },
new Kongfu() {ID=,Name="葵花宝典",Power= },
new Kongfu() {ID=,Name="独孤九剑",Power= },
new Kongfu() {ID=,Name="九阴真经",Power= },
new Kongfu() {ID=,Name="弹指神功",Power= }
};
表达式基本写法
var res = from m in masterList
where m.MenPai == "丐帮"//条件,布尔表达式
select m.Name;//返回名字的集合
事实上,条件语句是可以用一个委托代替的,如下面的代码
delegate bool BoolDel(MartialArtsMaster mar);
var res = from m in masterList
where boolDel(m)
select m.Name;
也可以使用扩展方法的方式进行查询
var res = masterList.Where(new Func<MartialArtsMaster, bool>(boolDel));
接着我用下面的代码输出
Console.WriteLine("找到 " + res.Count() + " 条记录:");
foreach(var item in res)
{
Console.WriteLine(item);
}

联合查询
使用多个from in 进行查询
var res = from m in masterList
from k in kongfuList
where m.Kongfu == k.Name && k.Power >
select new { master = m, kongfu = k };
使用扩展方法进行联合查询
var res = masterList.SelectMany(m => kongfuList, (m, k) => new { master = m, kongfu = k })
.Where(x => x.master.Kongfu == x.kongfu.Name && x.kongfu.Power > );

使用Join on 进行联合查询
var res = from m in masterList
join k in kongfuList on m.Kongfu equals k.Name
select new { master = m, kongfu = k };

对查询结果进行排序
var res = from m in masterList
orderby m.Level, m.Age descending //级别升序,年龄降序
select m;
扩展方法形式
var res = masterList.OrderBy(m => m.Level).ThenByDescending(m => m.Age);

分组查询
var res = from k in kongfuList
join m in masterList on k.Name equals m.Kongfu
into groups//根据 k 分组
orderby groups.Count()
select new { kongfu = k, count = groups.Count() };

按照自身字段分组
var res = from m in masterList
group m by m.MenPai into g
select new { MenPai = g.Key, Count = g.Count() };

量词操作
其实就是查询这个集合里是否包含我要查的东西
Console.WriteLine(masterList.Any(m => m.MenPai == "少林寺"));//任一满足,则返回true
Console.WriteLine(masterList.All(m => m.MenPai == "丐帮"));//所有满足,则返回true
第一行查询武林高手列表里有没有少林寺的,第二行查询列表里的是不是都是丐帮的

C# Linq 学习笔记的更多相关文章
- linq学习笔记
最近在学习linq的一些基础知识,看了c#高级编程及阅读了园子内部几篇优秀的博文,有所体会,感觉应该记录下来,作为以后复习使用.都是一些最基础的知识,大致分为三个部分:linq预备知识:linq查询: ...
- (转)Linq学习笔记
写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...
- C#之Linq学习笔记【转】
写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...
- C# LINQ学习笔记一:走进LINQ的世界
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介: 语言集成查询(LINQ)是Vi ...
- LINQ 学习笔记(1)
学习资源参考 : http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 常用方法是 Where, OrderBy, Selec ...
- C# LINQ学习笔记五:LINQ to XML
本笔记摘抄自:https://www.cnblogs.com/yaozhenfa/p/CSharp_Linq_For_Xml.html,记录一下学习过程以备后续查用. 一.生成xml 1.1创建简单的 ...
- C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...
- C# LINQ学习笔记三:LINQ to OBJECT之操作字符串
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5814204.html,记录一下学习过程以备后续查用. 一.统计单词在字符串中出现的次数 请注意,若要执行计数, ...
- C# LINQ学习笔记二:LINQ标准查询操作概述
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用. “标准查询运算符”是组成语言集成查询 (LINQ) 模式 ...
随机推荐
- nyoj528-找球号(三) 【位运算】
http://acm.nyist.net/JudgeOnline/problem.php?pid=528 找球号(三) 时间限制:2000 ms | 内存限制:3000 KB 难度:2 描述 ...
- Little-endian和Big-endian(小端数据和大端数据)
Little和Big指的是内存地址的大小,end指的是数据的末尾. Little-endian指内存地址低的地方存数据的末尾(即低字节) Big-endian指内存地址高的地方存数据的末尾(即高字节) ...
- C++指针与引用
1.指针与引用的区别: (1)非空区别.引用不能指向空值. (2)合法性区别.由于指针可能为空,所以需要测试它以防止它为空. (3)可修改区别.引用初始化后不可再被修改. (4)内容区别.指针的内容是 ...
- vortex
vortex - Bing dictionary US['vɔr.teks]UK['vɔː(r)teks] n.旋涡:涡旋:低涡:感情(或局势)的旋涡 网络漩涡:涡流:旋风 变形Plural Form ...
- codeblocks不支持c++11的有效解决办法
首先cb支持c++11编程开发,但是不支持编译 看了网上好多,说setting里面设置一下就好了,16.01版本我安装了带ide的不带IDE的,安了好多次,但是就是没有那个选项 找不到c++11那个选 ...
- [leetcode]403. Frog Jump青蛙过河
A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...
- 不使用if switch 各种大于 小于 判断2个数的大小
哥们写的代码: dword big; __asm { mov eax,a mov ebx,b cmp eax,ebx jle HOHO big =ebx HOHO: big = eax } 网上搜了一 ...
- HttpApplicationState与HttpApplication
HttpApplicationState 类的单个实例在客户端第一次从某个特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时创建.对于 Web 服务器上的每个 ASP.NET 应用程序 ...
- conn not captured
线程 和 事件中 变量 not captured 把变量定义为 static 或者添加为全局变量(放在main之前)
- cocos2d-x 3.4版本,videoPlayer和webView上添加sprite等cocos控件
本帖源于小弟自己在项目过程中为了解决在cocos2d-x中实现ios里videoPlayer自定义控件的需求,所以挖出来大神的一个帖子http://www.cocoachina.com/bbs/rea ...