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. #2002 无法登录 MySQL 服务器

    phpMyAdmin无法登录,输入用户名和密码后点击“执行”后一直报 “#2002 无法登录 MySQL 服务器”. 解决办法,将 “phpMyAdmin/libraries”文件夹下的config. ...

  2. jQuary总结7:动画操作,显示与隐藏 淡入淡出, 滑入滑出

    1 jquery提供了三组基本动画,这些动画都是标准的.有规律的效果,jquery还提供了自定义动画的功能. 2 显示与隐藏: show([speed],[easing],[callback]) 显示 ...

  3. HDU 6148 Valley Numer (数位DP)

    题意:... 析:好久没写数位DP了,几乎就是不会了.... dp[i][last][s] 表示前 i 位上一位是 last,当前的状态是 s,0表示非上升,1 表示非下降,然后就很简单了,只有 0 ...

  4. SourceInsight中 加namespace宏后,无法跳转问题解决

    Option->preferences->languages: C++ language->special, checked Ignore namespace declaration ...

  5. Atcoder 2566 3N Numbers(优先队列优化DP)

    問題文N を 1 以上の整数とします. 長さ 3N の数列 a=(a1,a2,…,a3N) があります. すぬけ君は.a からちょうど N 個の要素を取り除き.残った 2N 個の要素を元の順序で並べ. ...

  6. 解决安装VC6.0后出现MSDEV.EXE错误,无法用打开工程解决方法

    问题:安装VC6.0后,在打开项目或添加文件时,出现如下错误: 可能导致原因:由于Ms安装软件的兼容性问题,导致VC6.0安装不完全, 解决方法:--网上打sp6补丁的方法貌似不可用,所以可以采用另一 ...

  7. mysql中判断记录是否存在方法比较【转】

    把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入. 我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename ...

  8. Transaction And Lock--在事务中使用TRY CATCH

    1>当XACT_ABORT被设置为ON时,如果TSQL 语句遇到运行时错误,整个事务会被回滚和结束2>当XACT_ABORT被设置为OFF时,如果TSQL 语句遇到运行时错误,只会回滚当前 ...

  9. atan2()如何转换为角度

    atan2()如何转换为角度 Math.atan2()函数返回点(x,y)和原点(0,0)之间直线的倾斜角.那么如何计算任意两点间直线的倾斜角呢?只需要将两点x,y坐标分别相减得到一个新的点(x2-x ...

  10. 工作中的Buff加成-结构化思考力:第一章:认识结构化思维及其作用

    一:引言 为了更好的说明结构思考力,我们先来做几个小测试. PS:如果你能做到,请留言,因为我要和你交好友,因为你是人才啊,可以挖一挖,挖到我的公司中. 第一个测试:请在三秒内记住下列数字.数字顺序不 ...