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

本文不想罗列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. mysql访问连接过多

    今天开发中启动服务器,发现不管怎么样都会报连接池已满,随后删除数据库中的连接,发现可以启动,后来关闭后重新启动又出现连接池已满的错误.后监控数据库发现,当我关闭服务的时候,数据库的连接并没有关闭,随后 ...

  2. HTML基础(一)——一般标签、常用标签和表格

    第一部分  HTML <html>    --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> ...

  3. 简单看看ThreadPool的源码以及从中看出线程间传值的另一种方法

    这几天太忙没时间写博客,今天回家就简单的看了下ThreadPool的源码,发现有一个好玩的东西,叫做”执行上下文“,拽名叫做:”ExecutionContext“. 一:ThreadPool的大概流程 ...

  4. 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  5. spring项目的 context root 修改之后,导致 WebApplicationContext 初始化两次的解决方法

    修改了 spring web 项目的 context root 为 / 之后,在启动项目时,会导致 WebApplicationContext  初始化两次,下面是其初始化日志: 第一次初始化: 四月 ...

  6. hdu Dylans loves tree [LCA] (树链剖分)

    Dylans loves tree view code#pragma comment(linker, "/STACK:1024000000,1024000000") #includ ...

  7. .net 操作sftp服务器

    因为项目的需要,整理了一段C#操作sftp的方法. 依赖的第三方类库名称为:SharpSSH 1.1.1.13. 代码如下: 1: using System; 2: using System.Coll ...

  8. Android图片开发内幕--基础篇

    前言:本来我是做电视应用的,但是因为公司要出手机,人员紧张,所以就抽调我去支援一下,谁叫俺是雷锋呢!我做的一个功能就是处理手机中的应用ICON,处理无非就是美化一下,重新与底板进行合成和裁剪,用到了很 ...

  9. Windows Azure文件共享服务--File Service

    部署在Windows Azure上的虚拟机之间如何共享文件?例如:Web Server A和Web Server B组成负载均衡集群,两个服务器需要一个共享目录来存储用户上传的文件.通常,大家可能首先 ...

  10. java设计模式之抽象工厂模式

    上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...