---恢复内容开始---

本文不想罗列linq的通俗使用方法。因为很多博文都已经写得很详细了。

此处直接贴出源码,如果有需要的朋友可以参考,希望更多的朋友能够补充更多的linq的高级应用。

源码如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace linq
{
class Program
{
static void Main(string[] args)
{
Person[] ps = {
new Person{Name="jack",Age=,Phone="",PID=},
new Person{Name="tom",Age=,Phone="235asdg64",PID=},
new Person{Name="jerry",Age=,Phone="235dasg64",PID=},
new Person{Name="lily",Age=,Phone="23asdg564",PID=}
};
Animal[] ana = {
new Animal{AID=,Name="dog",PID=},
new Animal{AID=,Name="cat",PID=},
new Animal{AID=,Name="dog",PID=},
new Animal{AID=,Name="chicken",PID=},
new Animal{AID=,Name="dog",PID=},
new Animal{AID=,Name="dog",PID=},
new Animal{AID=,Name="cat",PID=},
new Animal{AID=,Name="cat",PID=}
};
Console.WriteLine("----------------分组排序------------------------");
//分组
var result = from p in ps
group p by p.Age into g//根据p的值对p进行分组,每组放入g变量中
orderby g.Count() descending
//g.Key为每一组的“组标识”(比如根据年龄groupby,年龄就是组标识)
select new { Name = g.Key, Count = g.Count() };
ps.Where(p => p.Age > );
foreach (var p in result)
{
Console.WriteLine("年龄为:"+p.Name + "的人数是:" + p.Count);
} Console.WriteLine("----------------等值连接------------------------");
//连接 多表查询---下面为等值连接即内连接
var data = from p in ps
join a in ana on p.PID equals a.PID
select new {PID=p.PID,PName=p.Name,PAge=p.Age,PPhone=p.Phone,AID=a.AID,AName=a.Name };
foreach (var item in data)
{
Console.WriteLine(item.PID+"--"+item.PName+"--"+item.PAge+"--"+item.PPhone+"--"+item.AID+"--"+item.AName);
}
Console.WriteLine("----------------左连接------------------------");
//左连接的写法
var data1 = from p in ps
join a in ana on p.PID equals a.PID
into temp //临时表
from t in temp.DefaultIfEmpty()
select new { PID = p.PID, PName = p.Name, PAge = p.Age, PPhone = p.Phone, AID =( t!=null?t.AID:), AName = (t!=null?t.Name:"null")};
foreach (var item in data1)
{
Console.WriteLine(item.PID + "--" + item.PName + "--" + item.PAge + "--" + item.PPhone + "--" + item.AID+ "--" + item.AName);
} //lamba本质剖析
var d1 = from p in ps
where p.Age>
select p;
//Where,Select等均为IEnumerable接口的扩展方法
var d2 = ps.Where(p => p.Age > ).Select(p => p);
var d3 = ps.Where(p => p.Age > );
var d4 = ps.Where((p) => p.Age > );
//其实where方法内的参数是一个匿名方法或者说是匿名委托 var p=function(parameter){return i>0}
//系统委托 public delegate TResult Func<in T, out TResult>(T arg);
//当只有一个参数,方法内只有一行代码时可以简写为 var d3 = ps.Where(p => p.Age > 30);
var d5 = ps.Where((p) => { return p.Age > ; }); //lamba在多线程中的应用
//i => { Console.WriteLine("hhh" +i); }就是一个匿名方法或者说匿名委托
//Thread t1 = new Thread(i => { Console.WriteLine("hhh" +i); });
Thread t1 = new Thread((i) => { Console.WriteLine("我是多线程委托实现:" + i); });
t1.Start(); //匿名委托的实现方式
//DelFun dfun=delegate(int i){Console.WriteLine(i);};
DelFun dfun = (i => { Console.WriteLine("我是匿名委托:"+i); });
dfun(); Console.Read();
}
delegate void DelFun(int i);
class Person
{
public int PID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Phone { get; set; }
}
class Animal
{
public int AID { get; set; }
public string Name { get; set; }
public int PID { get; set; } }
}
}

LINQ的高级应用的更多相关文章

  1. Linq(高级查询)

    一.条件查 public List<Users> ss(string ids) { List<Users> ulist=new List<Users>(); 声明使 ...

  2. LINQ 【高级查询】

    using (Data0216DataContext con = new Data0216DataContext()) {      List<Users> ulist = con.Use ...

  3. LinQ的高级查询

    模糊查询: //数据库 + 自定义名称 =new 数据库 //例子: mydbDataContext con = new mydbDataContext(); //模糊查询表达式中用.Contains ...

  4. 2017年12月14日 LinQ高级查&&Asp.net WebForm Asp.net MVC

    LinQ的高级查询用法 开头:StartsWith()结尾:EndsWith()模糊:Contains() 个数:Count最大值:Max(r => r.price)最小值:Min(r => ...

  5. C#webform LinQ

    LinQ的高级查询: 模糊查 con.Car.Where(r=>r.Name.Contains(cname)).ToList(); 以..开头 con.car.Where(r => r.n ...

  6. LinQ的查询操作

    LinQ的高级查询:-------------------在car表格进行练习操作: 一.模糊查询:1.在后台代码:(Contains)List<car>list=con.car.wher ...

  7. .NET深入解析LINQ框架2

    1].开篇介绍 在开始看本篇文章之前先允许我打断一下各位的兴致.其实这篇文章本来是没有打算加“开篇介绍”这一小节的,后来想想还是有必要反馈一下读者的意见.经过前三篇文章的详细讲解,我们基本上对LINQ ...

  8. ORM框架学习之EF

    首先推荐一篇很好的EF文章翻译,可以系统的学习一遍. <Entity Framework 6 Recipes>中文翻译系列 EF使用体会 优点: 可以省去Ado.net复杂的管道连接代码. ...

  9. .NET Runtime version 2.0.50727.xxx 执行引擎错误。 (Fatal Execution Engine Error)

    如题问题困扰本人良久. 尝试VS2005.VS2008.VS2010均出现过次问题. 主要现象: 1. Window设计器会崩溃,直接挂掉.(当逐条注释掉一些静态构造函数内的代码是情况好转) 2. 发 ...

随机推荐

  1. ORACLE查看表空间对象

    ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME       AS TABLESPACE_NAME    ...

  2. Linux运维常用命令总结

    1.删除0字节文件 find -type f -size 0 -exec rm -rf {} \;   2.查看进程 按内存从大到小排列 PS -e   -o "%C   : %p : %z ...

  3. 0012 win7x64安装CentOS7

    00 准备工作 到VirtualBox官网下载Oracle VM VirtualBox 5.1.8:https://www.virtualbox.org/wiki/Downloads 到centos官 ...

  4. JSP与Servelt的区别

    相同点: 两者都是服务端的技术,而JSP本质上就是Servelt: 都可以处理来自客户端的请求,都可以对请求作出响应: 都可以生成HTML页面返回. 不同点: 在实际开发中,对JSP编程成响应的HTM ...

  5. C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅳ部分

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  6. QT学习第2天

    回顾: 1.构建一个QT工程步骤 (1)qmake -project (2)qmake (3)make   2.两个常用的组件 QLabel 标签 QPushButton 按钮   --------- ...

  7. x01.os.7: 傻子一样的等

    傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...

  8. JavaScript为select添加option,select选项变化时的处理,获取slelect被选中的值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 系统进程 zygote(一)—— 概述

    和蔼的春光,充满鸳鸯的池塘:快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠.—— 徐志摩·醒!醒! ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张 ...

  10. Device ehth0 is not present

    context: 使用virtualbox 克隆了一个新硬盘,然后配为新建虚机的使用,但ifconfig只能发现lo,没有eth0 解决方案: 当前系统是centos6.6 cd /etc/udev/ ...