这一篇介绍了下面的内容:

  • 查询object数组
  • 查询强类型数组
  • 查询泛型字典
  • 查询字符串
  • SelectMany
  • 索引
  • Distinct操作符
  • 排序
  • 嵌套查询
  • 分组
  • 组连接
  • 内连接
  • 左外连接
  • 交叉连接
  • skip,take

详细请参看代码.

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ } private void button1_Click(object sender, EventArgs e)
{
//查询object数组
Object[] array = { "String", , true, 'a' };
var types = array
.Select(s => s.GetType().Name)
.OrderBy(s => s);
ObjectDumper.Write(types);
} private void button2_Click(object sender, EventArgs e)
{
//查询强类型数组
Book[] books ={
new Book{Title="Linq in Action"},
new Book{Title="Linq for Fun"},
new Book{Title="Extreme LINQ"}
}; var titles =
books
.Where(s => s.Title.Contains("Action"))
.Select(s => s.Title); ObjectDumper.Write(titles);
} private void button3_Click(object sender, EventArgs e)
{
//查询泛型字典
var dic = new Dictionary<int, string>();
dic.Add(, "zero");
dic.Add(, "un");
dic.Add(, "deux");
dic.Add(, "trois");
dic.Add(, "quatre");
var list =
dic
.Where(s => s.Key % == )
.Select(s => s.Value); ObjectDumper.Write(list);
} private void button4_Click(object sender, EventArgs e)
{
//查询字符串, 字符串实现了IEnumerable<Char>接口
var count = "Non-letter characters in this string: 6"
.Where(s => !Char.IsLetter(s))
.Count(); ObjectDumper.Write(count);
} private void button5_Click(object sender, EventArgs e)
{
string[] books ={"Funny Stories","All your base are belong to us",
"LINQ rules","C# on Rails","Bonjour mon Amour"};
var query =
books
.Where(s => s.Length > )
.Select(s => new { Book = s.ToUpper() }); var query1 =
from s in books
where s.Length >
orderby s
select new { Book = s.ToUpper() }; dataGridView1.DataSource = query1.ToList();
} private void button6_Click(object sender, EventArgs e)
{
var query =
from s in SampleData.Books
where s.Title.Length >
orderby s.Title
select new { Book = s.Title, Price = s.Price }; dataGridView2.DataSource = query.ToList();
} private void button7_Click(object sender, EventArgs e)
{
//SelectMany var query1 =
SampleData.Books
.SelectMany(s => s.Authors);
ObjectDumper.Write(query1); var query =
from book in SampleData.Books
from author in book.Authors
select author.FirstName + author.LastName; ObjectDumper.Write(query);
} private void button8_Click(object sender, EventArgs e)
{
var book =
SampleData.Books
.Select((s, no) => new { no, s.Title })
.OrderBy(s => s.Title); //无法翻译为等同的查询表达式语法 ObjectDumper.Write(book); } private void button9_Click(object sender, EventArgs e)
{
//Distinct操作符
var query =
SampleData.Books
.SelectMany(s => s.Authors)
.Select(s => s.FirstName + s.LastName);
ObjectDumper.Write(query); //去除重复的author,C#没有和distinct等同的查询表达式
var query1 =
SampleData.Books
.SelectMany(s => s.Authors)
.Distinct()
.Select(s => s.FirstName + s.LastName);
Console.WriteLine();
ObjectDumper.Write(query1); } private void button10_Click(object sender, EventArgs e)
{
//排序
var query =
from s in SampleData.Books
orderby s.Publisher.Name, s.Price descending, s.Title
select new
{
Publisher=s.Publisher.Name,
s.Price,
s.Title
};
dataGridView1.DataSource = query.ToList();
ObjectDumper.Write(query); var query1 =
SampleData.Books
.OrderBy(s => s.Publisher.Name)
.ThenByDescending(s => s.Price)
.ThenBy(s => s.Title)
.Select(s => new
{
publisher = s.Publisher.Name,
s.Price,
s.Title
});
Console.WriteLine();
ObjectDumper.Write(query1); } private void button11_Click(object sender, EventArgs e)
{
//嵌套查询 var query =
from s in SampleData.Publishers
select new
{
item1 = s.Name,
item2 =
from book in SampleData.Books
where book.Publisher.Name == s.Name
select book
}; foreach (var m in query)
{
Console.WriteLine(m.item1+":");
foreach (var k in m.item2)
{
Console.WriteLine(k.Title);
}
Console.WriteLine();
} } private void button12_Click(object sender, EventArgs e)
{
//分组
//代码让图书按出版社分组.属于同一出版社的图书将被分到相同的组中.
//在这个查询中,该分组publisherBooks对象是IGrouping<TKey,T>接口.
//其中T为集合IEnumerable<Book> var query =
from s in SampleData.Books
group s by s.Publisher into publisherBooks
select new
{
publisher=publisherBooks.Key.Name,
books=publisherBooks,
booksum=publisherBooks.Count()
};
foreach (var m in query)
{
Console.WriteLine(m.publisher + ":");
foreach (var k in m.books)
{
Console.WriteLine(k.Title);
}
Console.WriteLine(m.booksum);
Console.WriteLine();
} } private void button13_Click(object sender, EventArgs e)
{
//组连接
var query =
from s in SampleData.Publishers
join book in SampleData.Books
on s equals book.Publisher into publisherBooks
select new
{
publisher=s.Name,
books=publisherBooks
}; foreach (var m in query)
{
Console.WriteLine(m.publisher + ":");
foreach (var k in m.books)
{
Console.WriteLine(k.Title);
}
Console.WriteLine();
} } private void button14_Click(object sender, EventArgs e)
{
//内连接,旨在找到两个序列的交集
//和组连接的差别是,没有使用into关键字将元素分组,而是将图书投影在了出版社对象上
//注意没有任何书籍的出版社没有显示出来,这是因为在两个待连接序列中均符合条件的组合才会出现在结果序列中.
var query =
from s in SampleData.Publishers
join book in SampleData.Books on s equals book.Publisher
select new
{
publisher=s.Name,
books=book.Title
}; var query2=
SampleData.Publishers
.Join(SampleData.Books, //内部序列
s=>s, //外部的key选择器
book=>book.Publisher, //内部的key选择器
(s,book)=>new //结果选择器
{
publisher=s.Name,
books=book.Title
}); ObjectDumper.Write(query2); foreach (var m in query)
{
Console.WriteLine(m.publisher + ":");
Console.WriteLine(m.books);
Console.WriteLine();
} } private void button15_Click(object sender, EventArgs e)
{
//左外连接
var query =
from s in SampleData.Publishers
join book in SampleData.Books
on s equals book.Publisher into publisherBooks
from book in publisherBooks.DefaultIfEmpty() //为空序列提供默认元素
select new
{
publisher=s.Name,
books=book==default(Book)?"(no books)":book.Title
}; ObjectDumper.Write(query);
} private void button16_Click(object sender, EventArgs e)
{
//交叉连接, 计算出两个序列中所有元素的积
//结果序列由一个序列的每个元素和另一个序列中每个元素的完全组合构成
var query =
from s in SampleData.Publishers
from book in SampleData.Books
select new
{
correct=(s==book.Publisher),
publisher=s.Name,
books=book.Title
};
ObjectDumper.Write(query);
} private void button17_Click(object sender, EventArgs e)
{
//skip,take
var list1 = new List<string>();
for (int i = ; i < ; i++)
list1.Add(i.ToString()); var query =
list1
.Select(s=>s)
.Skip().Take(); ObjectDumper.Write(query);
} } }

本节源代码下载

原创文章,出自"博客园, 猪悟能'S博客" : http://www.cnblogs.com/hackpig/

LinQ实战学习笔记(四) LINQ to Object, 常用查询操作符的更多相关文章

  1. LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步

    LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨 ...

  2. LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树

    序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

  3. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  4. LinQ实战学习笔记(二) C#增强特性

    C# 为支持LINQ添加了许多语言特性: 隐式类型局部变量 对象初始化器 Lambda表达式 扩展方法 匿名类型 了解这些新特性是全面了解LINQ的重要先解条件,因此请不要忽视它们. (一)  隐式类 ...

  5. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  6. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  7. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  8. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  9. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁

    作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...

随机推荐

  1. Microsoft 2013 新技术学习笔记 三

    什么是代码结构的组织?asp.net MVC 5 默认创建出的几个目录的标准含义分别如下: Controllers目录存放MVC模式中的Controler Models目录存放MVC模式中的Model ...

  2. 30分钟入门Java8之方法引用

    30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method Referenc ...

  3. Outer Join Query Over Dblink Can Fail With ORA-904 (Doc ID 730256.1)

    Outer Join Query Over Dblink Can Fail With ORA-904 (Doc ID 730256.1) To Bottom Modified:03-May-2013T ...

  4. net组件转化成COM组件

    第一步:生成秘钥文件 强名称工具 (Sn.exe) 有助于使用强名称对程序集进行签名.Sn.exe 提供了用于密钥管理.签名生成和签名验证的选项. 1.使用Visual Studio 命令 Visua ...

  5. SQL server 数据库连接方式分析

    SQL server 数据库连接方式图示: ODBC和OLEDB连接的区别 ODBC(开放数据库互连):是Microsoft引进的一种早期数据库接口技术.它实际上是ADO的前身.早期的数据库连接是非常 ...

  6. smartjs 0.2 OOP讲解 - factory

    本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求 ...

  7. IMongoQuery的内部实现Query的用法

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...

  8. vs2010安装和使用

    vs2010是之前我跟老师做网站项目时安装的,这次软件工程作业我就用它了,安装过程中的截图就不存在了,我就详细说说它的使用吧. VS2010软件挺大的,下载大概要一个多小时,安装过程大概都是下一步. ...

  9. Linux磁盘操作命令

    查看本地磁盘使用情况:df或者df -l单位为k 容量便于查看,以1024单位换算为M或者G等:df -h或者df -lh 以1000为单位换算:df -H 显示文件系统类型:df -T 显示指定文件 ...

  10. 资料下载:敏捷个人的成长思考.pptx(第1次线下活动2011.04)

    本文挪至 http://www.zhoujingen.cn/blog/629.html PDF下载地址:http://down.51cto.com/data/207112 推荐:你可能需要的在线电子书 ...