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

  • 查询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. AX7 VM can not starting

    这个问题跟很多人遇到的一样,VM下载,一开始使用正常,特然某个时候,就挂了,直接引用老外的描述吧 http://community.dynamics.com/ax/f/33/p/203984/5296 ...

  2. 你还在问android横竖屏切换的生命周期?

    本文原创,转载请注明来自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题. ...

  3. 250W电源带i7+GTX1080?

    电源的科学: Q1:电源的额定功率是什么?峰值功率又是什么?A1:电源的额定功率就是电源正常工作时的功率,它的值为用电器的额定电压乘以额定电流.而峰值功率指的是电源短时间内能达到的最大功率, 一般情况 ...

  4. 二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  5. Android代码优化工具——Android lint

    作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件没有用到的图片资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidManifest文件存在异常 ...

  6. Eclipse项目名出现红叉

    一.背景与原因 项目第一次加进来的时候,我用的是D:\Java\jdk1.7.0_17,后来由于配置将tomcat切换到jboss,说是JBOSS某个版本只支持jdk6,我就将“环境变量JAVA_HO ...

  7. ASP.NET绑定控件语法

    1.DropDownList 前端代码aspx: <asp:DropDownList ID="ddl_meetingroom" runat="server" ...

  8. SmartJS 系列规划分享和背景介绍

    发布了smartjs后,有朋友问:“没看懂究竟是干嘛的”.唉,打击了,每次我都想高唱其实你不懂我的心. 今天把相关的东西都整理了一遍,给大家介绍一下.里面绝大多数都已经实现过,有些则是有新的思路重做或 ...

  9. .NET基金会开源项目

      .NET Compiler Platform ("Roslyn") .NET Core 5 .NET Micro Framework .NET SDK For Hadoop A ...

  10. LitePal + Gson + Volley的ORM框架尝试方案

    为了紧跟技术潮流,目前的项目开始采用ORM的思想进行重新设计. 数据库采用轻量级ORM框架LitePal,Json解析采用Gson,网络框架采用Volley. 如果只是单纯的将这些第三方框架引进来,事 ...