#region SQO (标准查询运算符) 方法
#region Where() Find() FindAll() FirstOrDefault()等方法
static void c01where()
{
var list = GetPigList();
//1.0 获取当前list集合中的符合条件的第一条数据
list.Sort((p, n) => p.Age - n.Age);
var pig = list.FirstOrDefault(p => p.Age > );
// pig.Say(); //2.0 first 获取当前list集合中的符合条件的第一条数据,如果没有找到则抛出异常
var pig1 = list.First(); //3.0 FindAll() 找到所有符合条件的数据,并全部返回
var newlist1 = list.FindAll(p => p.Age > ); //4.0 Find() 找到所有符合条件的数据,并返回第一条数据
var pig2 = list.Find(c => c.Id > );
//pig2.Say(); //5.0 Where()
//链式编程,从list集合中获取id==2的数据集合,通过foreach遍历新的数据集合,将数据打印出来
var pig3 = list.FindAll(p => p.Id == ).FirstOrDefault(); //和sql很像
//select * from list where age>2 and name like '%猪%'
//list.Where(p => p.Age > 2 && p.Name.Contains("猪")).ToList().ForEach(c => c.Say()); //lambda表达式的多条件或组合
list.Where(c => c.Id == || c.Id == ).ToList().ForEach(c => c.Say());
}
#endregion #region SQO 方法之 排序方法 OrderBy(), OrderByDescending()的使用
static void c01OrderBy()
{
var list = GetPigList();
//1.0 对list集合进行id的正序排列
list.OrderBy(c => c.Id).ToList().ForEach(c => c.Say()); //2.0 对list集合进行id的倒序排列
list.OrderByDescending(c => c.Id).ToList().ForEach(c => c.Say()); }
#endregion #region 链式编程
static void c01LinkCode()
{
var list = GetPigList();
list.Where(c => c.Id > ).Where(c => c.Age > ).OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 多条件排序 ThenByDescending() ,ThenBy()
static void c01ThenBy()
{
var pigList = GetPigList();
//多条件排序:
//第一个排序条件可以使用OrderBy(),OrderByDescending()
//但是第二和以后的其他排序条件则必须使用ThenByDescending() ,ThenBy() 进行排序
// 语法和sql很像
pigList.OrderBy(c => c.TypeId).ThenByDescending(c => c.Id).ToList().ForEach(c => c.Say());
} #endregion #region Any() Count() 的用法
static void c01Other()
{
var list = GetPigList();
Console.WriteLine(list.Any(c => c.Age > )); //true
Console.WriteLine(list.Any(c => c.Id < )); //false Console.WriteLine(list.Count(c => c.Id < ));//
Console.WriteLine(list.Count(c => c.Age > ));//
}
#endregion #region Select() 投影方法的演示,作用:将一个集合投影到另外一个集合(重点)
static void c01Select()
{
//获取list集合中的id和name 作为一个新的集合返回
var list = GetPigList();
//利用Select() 将list集合中的id name 属性的值投影成匿名类返回
var newlist = list.Select(c => new { c.Id, c.Name }).ToList();
newlist.ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 利用Skip().Take()方法实现分页查询(重点)
static void c01GetListByPage()
{
int tcount = ;
GetListByPage(, , out tcount);
} static List<Pig> GetListByPage(int pageIndex, int pageSize, out int totalcount)
{
List<Pig> list = GetPigList();
//从集合中分页获取的数据
int skipCount = (pageIndex - ) * pageSize;
totalcount = list.Count();
//Skip:从集合中跳过指定的行数,Take:从跳过的指定行数下一行开始取指定的数据行数
return list.Skip(skipCount).Take(pageSize).ToList();
}
#endregion #region join() 两个集合连接查询,模拟实现sql中的inner join(交叉连接)
static void c01Join()
{
var piglist = GetPigList();
var typelist = GetTypeList(); //1.0 利用join方法将两个集合联合查询,最终得到piglist中的Id,name,同时获取typelist中的typename
//sql 语句:select c.Id,c.Name,t,TypeName from piglist c inner join typelist t on (c.TypeId=t.TypeId)
var newlist = piglist.Join(typelist, c => c.TypeId, t => t.TypeId, (c, t) => new { c.Id, c.Name, t.TypeName }).ToList();
newlist.ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region GroupBy() 分组查询
static void c01GroupBy()
{
var list = GetPigList();
//1.0 调用GroupBy() 扩展方法 进行typeId的分组操作
//select TypeID from list group by TypeId
var groupList = list.GroupBy(c => c.TypeId).ToList();
groupList.ForEach(c =>
{
Console.WriteLine("分组号:" + c.Key + "------");
c.ToList().ForEach(d => d.Say());
});
}
#endregion #endregion

2.0 Linq To Object

#region 10.0 Linq to object (linq to sql, linq to xml)

        #region linq Where 的写法
static void c01LinqWhere()
{
var list = GetPigList();
//SQO写法
var newlist = list.Where(c => c.Age == && c.Name.Contains("猪"));
//linq的写法
//sql 语句:select c.Id,c.Name from list c where c.Age==12 and c.Name like '%猪%'
var newlist2 = (from c in list
where c.Age == && c.Name.Contains("猪")
select new { c.Id, c.Name }).ToList(); // newlist2.ForEach(c => Console.WriteLine(c.ToString())); var newlist3 = (from c in list
where c.Name.Contains("猪") && c.Id >
select new { c.Id, c.Name }).ToList();
newlist3.ForEach(c => Console.WriteLine(c.ToString())); }
#endregion #region join() 的linq写法
static void c01linqJoin()
{
var pigList = GetPigList();
var typeList = GetTypeList(); //linq的联表查询
(from c in pigList
join t in typeList
on c.TypeId equals t.TypeId
select new { c.Id, c.Name, t.TypeName }).ToList().ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region GroupBy 的linq写法
static void c01LinqGroupBy()
{
var list = GetPigList();
(from c in list
group c by c.TypeId).ToList().ForEach(c =>
{
Console.WriteLine("---------分组号:" + c.Key + "---------");
c.ToList().ForEach(d => d.Say());
});
} #endregion #region Linq的排序写法
static void c01Sort()
{
var list = GetPigList(); (from c in list
orderby c.Id descending
orderby c.Age descending
select c).ToList().ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion
#endregion

3.0 系统内置委托

#region 系统内置委托 & lambda表达式
#region 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值
/// <summary>
/// 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值
/// </summary>
static void C08Predicate()
{
List<Pig> list = GetPigList();
// 1.0.0查询当前年龄大于四岁的对象以新集合的形式返回
var newlist = list.FindAll(query); // 1.0.1 利用匿名委托来代替自定义方法query
var newlist2 = list.FindAll(delegate(Pig pig) { return pig.Age > ; }); //1.0.2 利用lambda表达式代替匿名委托 goes to
var newlist3 = list.FindAll(c => c.Age > );
}
#endregion #region 系统内置委托之 Action ,接受一个泛型参数,无返回值
/// <summary>
/// 系统内置委托之 Action ,接受一个泛型参数,无返回值
/// </summary>
static void c08Action()
{
var list = GetPigList();
list.ForEach(c => c.Say());
}
#endregion #region Comparison接收两个相同类型的参数,返回一个整数
/// <summary>
/// Comparison接收两个相同类型的参数,返回一个整数
/// </summary>
static void c08Comparison()
{
var list = GetPigList();
//1.0 对list进行排序
list.Sort((pre, next) => next.Id - pre.Id); //2.0 遍历输出
list.ForEach(c =>
c.Say());
}
#endregion #region 系统内置委托Func()
/// <summary>
/// 系统内置委托Func()
/// </summary>
static void c08Func()
{
var list = GetPigList();
//利用func<T,Result>进行集合数据筛选操作
var newlist = list.Where(c => c.Age > ).ToList();
newlist.ForEach(c => c.Say());
}
#endregion
#endregion

SQO (标准查询运算符)方法 & Linq To Object的更多相关文章

  1. .NET中那些所谓的新语法之四:标准查询运算符与LINQ

    开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50 ...

  2. .NET LINQ标准查询运算符

    标准查询运算符概述      “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法. 大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了 IEnumerable<T> ...

  3. C#3.0新增功能09 LINQ 标准查询运算符 01 概述

    连载目录    [已更新最新开发文章,点击查看详细] 标准查询运算符 是组成 LINQ 模式的方法. 这些方法中的大多数都作用于序列:其中序列指其类型实现 IEnumerable<T> 接 ...

  4. C#3.0新增功能09 LINQ 标准查询运算符 03 按执行方式的分类

    连载目录    [已更新最新开发文章,点击查看详细] 标准查询运算符方法的 LINQ to Objects 实现主要通过两种方法之一执行:立即执行和延迟执行.使用延迟执行的查询运算符可以进一步分为两种 ...

  5. C#3.0新增功能09 LINQ 标准查询运算符 04 运算

    连载目录    [已更新最新开发文章,点击查看详细] 本篇主要介绍标准查询运算符的常用运算功能. 01 对数据排序 排序操作基于一个或多个属性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. ...

  6. 十四、C# 支持标准查询运算符的集合接口

    支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算 ...

  7. “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法

    “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> 接口或 IQueryable& ...

  8. LINQ标准查询运算符的执行方式-延时之流式处理

    linq的延时执行是指枚举时才去一个个生成结果元素. 流式处理是linq延时执行的一种,在生成元素前不需要获取所有源元素,只要获取到的源元素足够计算时,便生成结果元素. 流式处理的标准查询运算符返回值 ...

  9. C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法

    连载目录    [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...

随机推荐

  1. 访问修饰符private

    private(C# 参考) private 关键字是一个成员访问修饰符. 私有访问是允许的最低访问级别. 私有成员只有在声明它们的类和结构体中才是可访问的,如下例所示: class Employee ...

  2. SQL 中delete和truncate区别

    1.前者按行删除,后者直接删除数据页 2.前者可带where删除部分,后者只能删除全表 3.前者在事务日志中记录每一行的记录,后者只记录页的释放 4.前者删除后,标识技术值不重置,后者重置 5.由fo ...

  3. 黄聪:wordpress工作原理

    WP初始化的过程:当你输入<yourlink>/wordpress对wordpress进行初始化时,wordpress默认会找根目录下的index.php页面,看一下index.php页面 ...

  4. SSH登录很慢问题的解决

    用ssh连其他linux机器,会等待10-30秒才有提示输入密码.严重影响工作效率.登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因: 1. DNS反向解析的问题 OpenSSH在用户登录的 ...

  5. cf666 C. Codeword 组合数学 离线分块思想

                      time limit per test 6 seconds memory limit per test 256 megabytes input standard i ...

  6. php命名空间学习

    在一个命名空间中,当 PHP 遇到一个非限定的类.函数或常量名称时,它使用不同的优先策略来解析该名称. 1.类名称总是解析到当前命名空间中的名称.因此在访问系统内部或不包含在命名空间中的类名称时,必须 ...

  7. linux命令(13) 删除指定文件夹下后缀名相同的文件

    方法一: find 目录 -name "*.abc" | xargs rm命令有点危险,可以先执行前半段,看看是不是你要删除的文件, 然后再整条执行 方法二:find . -nam ...

  8. 错误代码2104:无法下载Silverlight应用程序。请查看Web服务器设置

    今天调试Silverlight程序,把ClientBin文件夹下的.xap文件删除后遇到这样一个问题:错误代码2104:无法下载Silverlight应用程序.请查看Web服务器设置.在网上查了一下, ...

  9. C语言 段位

    C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为"位段"或"位域" 在结构体中位段的定义格式为: unsignede < ...

  10. ubuntu搭建分布式hadoop-2.6.0概略和错误

    详细配置:http://blog.csdn.net/ggz631047367/article/details/42426391 1.修改机器/etc/hostname分别为   master    s ...