LINQ,语言集成查询;

LINQ TO SQL,同EF,NHibernate一样,也是一种ORM框架;

1. 入门应用示例:

static public void LinqBasic()
{
var colors = new[] { "Red", "Orange", "Yellow", "Black", "Purple", "Grenn", "White", "Blue", "Hello World !" };
var query = from color in colors
orderby color ascending, color.Length descending
where color == "Red" || color.StartsWith("P") && color.Length >= || !color.Any()
select color; foreach (var color in query)
{
Console.WriteLine(color);
}
}

2. 限定符运算: 
    Any() //判断是否有元素满足某个条件 
    All()//判断是否所有的数据都满足某个条件 
    Contains//判断是否包含某个元素;

3. Set集合的用法:

主要测试了几中常见方法:Distinct(),Except(),Intersect()及Union()

static public void Set()
{
List<String> htsA = new List<String>() { "Red", "Red", "Black", "White", "White", "Blue" };
List<String> htsB = new List<String>() { "Red", "Red", "Black", "Black" }; IEnumerable<String> htsC = htsA.Distinct();
IEnumerable<String> htsD = htsA.Except(htsB);
IEnumerable<String> htsE = htsA.Intersect(htsB);
IEnumerable<String> htsF = htsA.Union(htsB); foreach (String ht in htsA)
{
Console.WriteLine(ht);
}
}

4. Skip()/SkipWhile() 及 Take()/TakeWhile()

Skip(n):跳过n元素开始读取;

SkipWhile(): 从第一个条件为false的地方开始读取元素,遇到第一个true条件则停止读取;

Take(n): 从第一个元素开始,读取n个元素

TakeWhile(); 从第一个条件为true的地方开始读取元素,遇到第一个false条件则停止读取;

static public void Skip()
{
var colors = new[] { "Red", "Orange", "Yellow", "Black", "Purple", "Grenn", "White", "Blue", "Hello World !" };
var res = colors.SkipWhile(n => n != "Black");
foreach (var color in res)
//foreach (var color in colors.Skip(5))
{
Console.WriteLine(color);
}
} static public void Take()
{
var colors = new[] { "Red", "Orange", "Yellow", "Black", "Purple", "Grenn", "White", "Blue", "Hello World !" };
var res = colors.TakeWhile(n => n != "Black");
foreach (var color in res)
//foreach (var color in colors.Take(5))
{
Console.WriteLine(color);
}
}

5. Select/SelectMany用法:

SelectMany:将嵌套列表合并为一个列表:

static public void Select()
{
var mat = new[] { new[] {,,,},
new[] {,,,},
new[] {,,,},
new[] {,,,}
}; var query_01 = mat.Select(n => n.ToList());
var query_02 = mat.SelectMany(n => n.ToList()); foreach (var val in query_01)
{
Console.WriteLine(val);
} foreach (var val in query_02)
{
Console.WriteLine(val);
}
}

6. Join/GroupJoin用法:

Join(param1,param2,param3,param4): param1:要联接的第一个集合;param2:第一个集合中与第二个集合的关联列;param3:第二个集合中与第一个集合的关联列;param4:返回列的集合(可以对返回列进行重命名)

Group join:适合返回有级别的列表

static public void Join()
{
List<Company> cmyList = new List<Company>
{
new Company {Id=,ComName="CMA"},
new Company {Id=,ComName="CMB"},
}; List<Employee> empList = new List<Employee>
{
new Employee {CompanyId=,EmpName="Jam",},
new Employee {CompanyId=,EmpName="Ke"},
new Employee {CompanyId=,EmpName="Lin"},
new Employee {CompanyId=,EmpName="SyEn"},
new Employee {CompanyId=,EmpName="Kate"}
}; var matJoin11 = cmyList.Join(empList, m => m.Id, n => n.CompanyId, (m, n) => new {CompanyName=m.ComName,EmployeeName=n.EmpName}).OrderBy(p => p.EmployeeName); var matJoin12 = from cmy in cmyList
join emp in empList on cmy.Id equals emp.CompanyId
select new { CompanyName = cmy.ComName, EmployeeName = emp.EmpName }; foreach (var val in matJoin11)
{
Console.WriteLine(val);
} foreach (var val in matJoin12)
{
Console.WriteLine(val);
} var matGJoin21 = cmyList.GroupJoin(empList, m => m.Id, n => n.CompanyId, (m, o) => new { CompanyName = m.ComName,EmployeeName=o.Select(n => n.EmpName)});
var matGJoin22 = (from cmy in cmyList
join emp in empList on cmy.Id equals emp.CompanyId into nt
select new
{
CompanyName = cmy.ComName,
EmployeeName = nt
}).ToList(); foreach (var val in matGJoin21)
{
Console.WriteLine(val.CompanyName+":");
foreach(var emp in val.EmployeeName)
{
Console.WriteLine("--"+emp);
}
} foreach (var val in matGJoin22)
{
Console.WriteLine(val.CompanyName + ":");
foreach (var emp in val.EmployeeName)
{
Console.WriteLine("--" + emp.EmpName);
}
}
}

运行结果:

7. Range()/Repeat()/SequenceEqual()

Range(param1,param2) param1:第一个值,默认第二个值为2,依次为3,4,5...; param2:需要生成的元素个数

Repeat()列表复制

SequenceEqual() 列表是否相等(元素个数,每个位置元素内容)的判断

static public void Range()
{
//Range(param1,param2) param1:第一个值,默认第二个值为2,依次为3,4,5...; param2:需要生成的元素个数
List<int> nl = Enumerable.Range(, ).Select(x => x + ).ToList();
foreach (int i in nl)
{
Console.WriteLine("{0}",i);
}
} static public void Repeat()
{
List<String> hts = new List<String>() { "Red", "Red", "Black", "White", "White", "Blue" };
var nht = Enumerable.Repeat(hts,).ToList().SelectMany(n => n.ToList());
foreach (var v in nht)
{
Console.WriteLine(v);
}
} //Enumerable.Empty:返回具有指定类型参数的空 IEnumerable<T>。 static public void SequenceEqual()
{
List<String> htA = new List<String>() { "Red", "Red", "Black", "White", "White", "Blue" };
List<String> htB = new List<String>() { "Red", "Red", "Black", "White", "White", "Blue" };
bool b = htA.SequenceEqual(htB);
Console.WriteLine(b);
}

8. 列表元素操作:First()/FirstOrDefault()/Last()/ElementAt()/Single()

static public void ElementOperation()
{
List<String> hts = new List<string>() { "Red", "Orange", "Yellow", "Black", "Purple", "Grenn", "White", "Blue"}; Console.WriteLine(hts.First());
Console.WriteLine(hts.FirstOrDefault(color => color.Length>));
Console.WriteLine(hts.Last());
Console.WriteLine(hts.ElementAt());
//Console.WriteLine(hts.Single(color => color.Length>5));
}static public void ElementOperation()
{
List<String> hts = new List<string>() { "Red", "Orange", "Yellow", "Black", "Purple", "Grenn", "White", "Blue"}; Console.WriteLine(hts.First());
Console.WriteLine(hts.FirstOrDefault(color => color.Length>));
Console.WriteLine(hts.Last());
Console.WriteLine(hts.ElementAt());
//Console.WriteLine(hts.Single(color => color.Length>5));
}

9. GroupBy用法:

static public void GroupBy()
{
List<String> hts = new List<String>() { "Red", "Red", "Black", "White", "White", "Blue" };
var query = from ht in hts group ht by ht.Substring(, );
foreach (var gp in query)
{
Console.WriteLine("Colors start with "+gp.Key);
foreach (var dt in gp)
{
Console.WriteLine(dt);
}
}
}

10. Union用法:

static public void Union()
{
var matA = new[] {
new[] {,,,},
new[] {,,,}
}; var matB = new[] {
new[] {,,,},
new[] {,,,}
}; var matJoin = matA.Union(matB); var v = matJoin.SelectMany(n => n.ToList()); foreach (var val in v)
{
Console.WriteLine(val);
}
}

11. 类型转换:

Cast():将IEnumerable的元素强制转换为指定的IEnumerable类型;
      AsEnumerable():将其他类型转为IEnumerable<T>;
      OfType():根据指定类型筛选IEnumerable的元素。

static public void TypeConvert()
{
var colors = new[] { "Red", "Black", "Green", "Purple", "White", "Blue" };
List<string> hts = colors.AsEnumerable().ToList(); foreach (string s in hts)
{
Console.WriteLine(s);
} Console.WriteLine("The int value in the list is as below:");
ArrayList ays = new ArrayList() { "Red", "Black", "Green", , "White", "Blue" };
List<int> sls = ays.OfType<int>().ToList();
foreach (int s in sls)
{
Console.WriteLine(s);
} Console.WriteLine("The new list after convert is as below:");
List<string> sls_new = ays.OfType<string>().ToList();
IEnumerable<string> ays_new = sls_new.Cast<string>();
foreach (string s in ays_new)
{
Console.WriteLine(s);
}
}

12.序列合并:

把两个序列合并为一个:

static public void Concat()
{
List<String> htA = new List<String>() { "Red", "Blue" };
List<String> htB = new List<String>() { "Black", "White" };
List<string> hts = htA.Select(x => x).Concat(htB.Select(y => y)).ToList(); foreach (string ht in hts)
{
Console.WriteLine(ht);
}
}

13. 聚合运算:

static public void Aggregate()
{
List<int> its = new List<int> { , , , , , , };
double avg = its.Average();
int max = its.Max();
int min = its.Min();
int cut = its.Count();
int sum = its.Sum(); Console.WriteLine("Average is {0};", avg);
Console.WriteLine("Max is {0};", max);
Console.WriteLine("Min is {0};", min);
Console.WriteLine("Count is {0};", cut);
Console.WriteLine("Sum is {0};", sum);
}

至此,关于Linq的基本用法几乎都在这里了,对于更多详细说明,请参见官方文档.

C# LINQ学习笔记的更多相关文章

  1. linq学习笔记

    最近在学习linq的一些基础知识,看了c#高级编程及阅读了园子内部几篇优秀的博文,有所体会,感觉应该记录下来,作为以后复习使用.都是一些最基础的知识,大致分为三个部分:linq预备知识:linq查询: ...

  2. (转)Linq学习笔记

    写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...

  3. C#之Linq学习笔记【转】

    写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...

  4. C# Linq 学习笔记

    刚刚学习了 Siki老师 的C#教程Linq部分,以下是笔记 需要引用命名空间 using System.Linq; 然后我们需要准备数据 武林高手类 /// <summary> /// ...

  5. C# LINQ学习笔记一:走进LINQ的世界

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介:     语言集成查询(LINQ)是Vi ...

  6. LINQ 学习笔记(1)

    学习资源参考 : http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 常用方法是 Where, OrderBy, Selec ...

  7. C# LINQ学习笔记五:LINQ to XML

    本笔记摘抄自:https://www.cnblogs.com/yaozhenfa/p/CSharp_Linq_For_Xml.html,记录一下学习过程以备后续查用. 一.生成xml 1.1创建简单的 ...

  8. C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...

  9. C# LINQ学习笔记三:LINQ to OBJECT之操作字符串

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5814204.html,记录一下学习过程以备后续查用. 一.统计单词在字符串中出现的次数 请注意,若要执行计数, ...

  10. C# LINQ学习笔记二:LINQ标准查询操作概述

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用. “标准查询运算符”是组成语言集成查询 (LINQ) 模式 ...

随机推荐

  1. git post-receive 待验证的代码

    使用 git post-receive 钩子部署服务端代码 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: ...

  2. HDU 4714 Tree2cycle (树形DP)

    题意:给定一棵树,断开一条边或者接上一条边都要花费 1,问你花费最少把这棵树就成一个环. 析:树形DP,想一想,要想把一棵树变成一个环,那么就要把一些枝枝叶叶都换掉,对于一个分叉是大于等于2的我们一定 ...

  3. C++学习--入口函数

    在学习第一个C++程序的时候发现控制台程序的入口函数是int _tmain而不是main,查了资料才发现_tmain()是为了支持unicode所使用的main一个别名,宏定义在<stdafx. ...

  4. ACM 超级楼梯 发工资

    超级楼梯 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M( ...

  5. Python 3 Mysql 增删改查

    import pymysql import datainfo import time #获取参数 host = datainfo.host username = datainfo.username p ...

  6. 学习python4

    文件系统实现文件的增删改查 UnicodeDecodeError: 'gbk' codec can't decode byte 0x9a in position 8: illegal multibyt ...

  7. 谷歌三大核心技术(一)Google File System中文版

    http://www.open-open.com/lib/view/open1328763454608.html

  8. Linux下卸载删除.Net Core

    最近在技术博客和技术交流群遇到很多小伙伴们在Linux下更新或者安装.Net Core SDK后dotnet命令无法识别等问题,现如下解决: 卸载SDK命令 sudo yum remove dotne ...

  9. RESTDebugger-我们的REST调试工具!!

    Delphi:XE8 XE8已经为我们提供了调试REST程序的工具了,就是“RESTDebugger.exe”.这个小工具,在XE8的菜单中可以找到: 如果在这里找不到,我们可以直接在XE8的bin目 ...

  10. 点击隐藏显示和点击body空白处隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...