var list = new List<Model>
{
new Model { Id = , UserName = "张三", Password = "", Email = "zhang3@yoy.com"},
new Model { Id = , UserName = "李四", Password = "", Email = "li4@yoy.com"},
new Model { Id = , UserName = "王五", Password = "", Email = "wang5@yoy.com"},
new Model { Id = , UserName = "赵六", Password = "", Email = "zhao6@yoy.com"},
}; //Add():添加单个,新加的数据将会在列表的最末端
//直译:添加
list.Add(new Model { Id = , UserName = "孙七", Password = "", Email = "sun7@yoy.com"});
//AddRange():添加多个,新加的数据将会在列表的最末端
//直译:范围添加
list.AddRange(new List<Model>
{
new Model { Id = , UserName = "刘一", Password = "", Email = "liu1@yoy.com"},
new Model { Id = , UserName = "陈二", Password = "", Email = "chen2@yoy.com"},
});
//Insert():添加单个,新加的数据将会在指定的索引位置,用法与Add()类似
//InsertRange():添加多个,新加的数据将会在指定的索引位置,AddRange()类似
//能指定位置插入数据,但是开销要大于Add/AddRange,目标集合越大,开销就越大
list.Insert(, new Model { Id = , UserName = "周八", Password = "", Email = "zhou8@yoy.com" });
list.InsertRange(, new List<Model>
{
new Model { Id = , UserName = "吴九", Password = "", Email = "wu9@yoy.com"},
new Model { Id = , UserName = "郑十", Password = "", Email = "zheng10@yoy.com"},
}); //将集合转化为指定的类型
var enumerable = list.AsEnumerable();//IEnumerable<T>类型
var queryable = list.AsQueryable();//IQueryable<T>类型
//IEnumerable类型内存迭代,
//IQueryable类型表达式解析,语法树动态解析,延后查询
//AsQueryable()常用于存在不确定的查询条件之前 //Distinct():去重复,与sql中distinct相同,返回值为IEnumerable<T>类型
list = list.Distinct().ToList(); //ForEach():循环方法,括号中并非添加bool条件,而是进行操作
list.ForEach(f => f.Id += );
list.ForEach(f =>
{
if (f.Id == ) f.Password = "";
else f.Id -= ;
}); //Find():Find一类方法为Framework2.0时期的产物,现基本不用
var find = list.Find(f => f.Id == );
var findAll = list.FindAll(f => f.Id == ); //FirstOrDefault():第一个或者是默认值,返回值肯能为null
//Framework3.5时期的产物,运用范围更广,支持IEnemerable<T>,但速度比Find较慢
//First():与FirstOrDefault()用法相似,但不会返回null,而抛出异常
var first = list.First();
var firstOrDefault = list.FirstOrDefault();
//最后一个,原理同First()/FirstOrDefault()
var last = list.Last();
var lastOrDefault = list.LastOrDefault();
//唯一的一个,原理同First()/FirstOrDefault(),但如果出现重复数据,则抛异常
var single = list.Single(s => s.Id == );
var singleOrDefault = list.SingleOrDefault(s => s.Id == ); var newList = new List<NewModel>
{
new NewModel { UserId = , Address = "Address", CellPhone = "", Country = "中国"},
new NewModel { UserId = , Address = "Address", CellPhone = "", Country = "西班牙"},
new NewModel { UserId = , Address = "Address1", CellPhone = "", Country = "中国"},
new NewModel { UserId = , Address = "Address2", CellPhone = "", Country = "美国"},
};
//Join():关联,相当于sql中的inner join
//写法:第一集合.Join(第二集合,第一的关联值,第二的关联值,(第一集合名,第二集合名)=>查询结果)
//查询结果可自定义类型,返回值为IEnemerable<查询结果>
var joinInfo = list.Join(newList, l => l.Id, nl => nl.UserId, (l, nl) => new { l, nl }).ToList();
var joinLinq = (from l in list
join nl in newList on l.Id equals nl.UserId
select new { l, nl }).ToList(); //GroupBy():按照指定参数进行分组,返回值类型为IEnemerable<IGrouping<string,T>>
var groupInfo = newList.GroupBy(g => g.Country).ToList();
var groupLinq = (from nl in newList
group nl by nl.Country into nlGroup
select nlGroup); //GroupJoin():左关联,相当于sql中的left join后进行了一定的分组,等于主表.Join(子表.GroupBy())
//按照一定规律分组后进行关联,形成一对多的匿名类型,IEnemerable<{T1, IEnemerable<T2>}>
//写法与Join相同:第一集合.GroupJoin(第二集合,第一的关联值,第二的关联值,(第一集合名,第二集合名)=>查询结果)
//查询结果可自定义类型,返回值为IEnemerable<查询结果>
//第一集合为主集合,第二集合为子集合,子集合条数可能为0
var groupJoin = list.GroupJoin(newList, l => l.Id, g => g.UserId, (l, g) => new { l, g }).ToList();
var groupJoinLinq = (from l in list
join nl in newList on l.Id equals nl.UserId into g
select new { l, g }).ToList(); //DefaultIfEmpty():查询默认或空实体,返回值为IEnumerable<T>类型,常用于做关联
var defaultList = list.DefaultIfEmpty().ToList(); //左关联变形:Join()/GroupJoin()加DefaultIfEmpty()方法实现
//先将两集合进行GroupJoin(),之后将查询结果中的子集合DefaultIfEmpty()
//注:此处的做关联与sql中的左关联有所不同,此处的左关联为一对一或一对null
var leftJoin = list.GroupJoin(newList, l => l.Id, g => g.UserId, (l, g) => new { l, g = g.DefaultIfEmpty() }).ToList();
var leftLinq1 = (from l in list
join nl in newList on l.Id equals nl.UserId into g
select new { l, g = g.DefaultIfEmpty() });
var leftLinq2 = (from l in list
join nl in newList on l.Id equals nl.UserId into nlJoin
from g in nlJoin.DefaultIfEmpty()
select new { l, g }); //All():集合中的数据是否全部符合条件
//直译:全部
var trueAll = list.All(a => a.Id > );
var falseAll = list.All(a => a.Id > ); //Any():集合中是否含有符合条件的数据
//直译:存在
var trueAny = list.Any(a => a.Id == );
var falseAny = list.Any(a => a.Id == ); //Min()/Max():最小值/最大值
//筛选出指定值/指定算法为最小/最大的数据,返回单条
//可与左关联/排序等活用
var minList = list.Min(m => m.Id);
var maxList = list.Max(m => m.Email.Length); //OrderBy()/OrderByDescending():正序/逆序
//按照指定字段/指定算法进行正序/逆序的排序
//可与左关联、分页等活用
var orderBy = list.OrderBy(o => o.Id).ToList();
var orderByLinq = (from l in list
orderby l.Id
select l).ToList();
var orderByDesc = list.OrderByDescending(o => o.Email.Length);
var orderByDescLinq = (from l in list
orderby l.Email.Length descending
select l).ToList();
//Reverse():反转排序,List无法适用
var reverse = list.Where(w => true).Reverse().ToList(); //Select():将一个实体中的数据转为另一个实体
//返回值类型为:IEnumerable<T>
var select1 = list.Select(s => s.Id).ToList();//指定字段/值
var select2 = list.Select(s => new { s.UserName, UserEmail = s.Email }).ToList();//匿名类型
var select3 = list.Select(s => new UserInfo { UserId = s.Id, UserName = s.UserName, UserEmail = s.Email }).ToList();
var select1Linq = (from l in list
select l.Id).ToList();
var select2Linq = (from l in list
select new { l.UserName, UserEmail = l.Email }).ToList();
var select3Linq = (from l in list
select new UserInfo { UserId = l.Id, UserName = l.UserName, UserEmail = l.Email }).ToList();
//SelectMany():查询出指定实体中的指定子集
var selectMany = groupJoin.SelectMany(s => s.g).ToList();
var country1 = groupJoin.SelectMany(s => s.g).Select(s => s.Country).ToList();
var country2 = groupJoin.Select(s => s.g.Select(ss => ss.Country)).ToList(); //Skip():跳过指定个数,常用于分页等
var skip = select1.Skip();
//Take():获取指定个数,常用于分页等
var take = select1.Take();
//SkipWhile():跳过值,直到符合条件为止,按序跳过,当符合条件开始获取剩余的
//直译:跳过直到
var skipWhile1 = select1.SkipWhile(w => w < ).ToList();
var skipWhile2 = select1.SkipWhile(w => w == ).ToList();
//TakeWhile():获取值,直到符合条件为止,按序获取,从第一条获取,当不符合条件则跳出
//直译:获取直到
var takeWhile1 = select1.TakeWhile(w => w < ).ToList();
var takeWhile2 = select1.TakeWhile(w => w == ).ToList(); //Sum():求和,指定值的和,与sql中的功能相同
var sum = list.Sum(s => s.Id);
//Union():追加数据,与sql中的功能相同
var doubleList = select1.Union(skip).ToList();
//Where():查询条件,与sql中的功能相同
var where = select1.Where(w => w > ).ToList(); ; //删除指定数据
//Remove():删除指定数据,参数为数据类型
//RemoveAt():删除指定索引位置的数据
//RemoveRange():批量删除指定索引位置的数据(索引位置, 删除个数)
//RemoveAll():删除全部符合条件的数据
list.Remove(firstOrDefault);
list.RemoveAt();
list.RemoveRange(, );
list.RemoveAll(r => r.Id > ); var test = from l in list
join nl in newList on l.Id equals nl.UserId
let x = l.Password
select new { x, nl }; Console.ReadKey();

Lambda&Linq的更多相关文章

  1. [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...

  2. 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)

    话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法  (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...

  3. [转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    本文转自:https://blog.csdn.net/dingxiaowei2013/article/details/29405687 继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下 ...

  4. 几种查询方法(lambda Linq Enumerable静态类方式)

    1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...

  5. C# Lambda && Linq

    Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作"goes to",=>左侧是变量,右侧是表达式,变量类型可以自 ...

  6. 有关 Lambda && linq练习 有待整理

    1. 查询Student表中的所有记录的Sname.Ssex和Class列.(select sname,ssex,class from student) Students.Select(s=> ...

  7. ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高 ...

  8. Lambda表达式动态拼接(备忘)

    EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句 分类: C# Lambda/Linq Entity Framework 2013-05-24 06:58 ...

  9. [c#菜鸟]lambda表达式

    what 一.定义 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 .通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.(微软) 理 ...

随机推荐

  1. Python ---- KMP(博文推荐+代码)

    既解决完后宫问题(八皇后问题)后,又利用半天的时间完成了著名的“看毛片”算法——KMP.对于初学者来说这绝对是个大坑,非常难以理解. 在此,向提出KMP算法的三位大佬表示诚挚的敬意.!!!牛X!!! ...

  2. js的StringBuffer类

    function StringBuffer(str){ var arr = []; str = str || ""; arr.push(str); this.append = fu ...

  3. 【7】Django网页视图模板处理

    天下难事必作於易.天下大事必作於细.是以圣人终不为大,故能成其大 --老子<道德经> 本节内容 HTML页面的渲染 使用页面模板 异常处理 超链接路径处理 路由命名空间 1. HTML页面 ...

  4. scp相关命令总结

    scp 跨机远程拷贝scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.当你服务器硬盘 ...

  5. Struts2 值栈总结(ValueStack)

    1.获取值栈 //获取值栈的第一种方式 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttri ...

  6. 暑假集训D19总结

    考试 日常爆炸 T1   辣么简单,淼到极致的DP,我竟然打挂了= =,打挂了= =,只拿了75分啊,不能接受啊= = T2   随便找找规律,瞎XX模拟一下就能A的鬼东西,我竟然打了个暴力+Floy ...

  7. [bzoj2599][IOI2011]Race_树上点分治

    Race bzoj-2599 题目大意:询问一颗树上最短的.长度为k的链,边有边权,n个节点. 注释:$1\le n \le 2\cdot 10^5$,$1\le k \le 10^6$. 想法:树上 ...

  8. N天学习一个Linux命令之hostnamectl

    前言 安装了CentOS7,发现按照以前修改文件/etc/sysconfig/network HOSTNAME字段主机名的方式不生效了,查资料发现可以使用hostnamectl命令 用途 Contro ...

  9. 2015 Changchun Regional

    弱没机会去长春,但拿了题来做了,加上请教各路大牛,理论AC了一发,但没实现~(感谢各路有形无形的大牛的指导) A题~Too Rich 给你1,5,10,20,50,100,200,500,1000,2 ...

  10. 多个机器获取微信access-token导致的有效性问题

    多个机器获取微信access-token导致的有效性问题 单个机器获取的access-token,只有最后一个是有效的: 多个机器各自获取自己的access-token,都是各自有效的: 在服务器和本 ...