一、总述
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。LINQ 系列技术提供了针对对象 (LINQ to Objects)、关系数据库 (LINQ to SQL) 和 XML (LINQ to XML) 的一致查询体验。
Linq查询语法:
1、扩展方法语法:扩展方法+lambda表达式
扩展方法语法(传输链):IEnumerabl<T> query=源集合.Where(过滤,必须bool表达式).OrderBy(排序条件).Select(选择条件)
2、声明式查询语法:类型SQL查询方式
查询表达式:
var 结果集 = from n in 数据源 where 过滤表达式 orderby 排序 select 投影(选择)
二、语法
1.where
var res=resources.Where(r=>r.id==2&&r.name.Contains("小"));//扩展方法语法
var res=from r in resources where r.id==2&&r.name.Contains("小") select r;//查询表达式
2.用索引筛选
var res= resources.Where((r, index) => r.Name.StartsWith("小") && index % 2 != 0)
3.OfType
object[] data = { "one", 2, 3, "four", "five", 6 };
var query = data.OfType<string>();
4.复合from
var res=from r in resources
from s in students
where r.id==s.id orderby r.name select r.id +r.name
5.中间件排序 (orderby)
//orderby
var sick = from s in stu from t in het where s.name == t.name orderby s.age select s.name + t.name;
//降序
var res=from r in resources where r.id==2&&r.name.Contains("小") OrderByDescending(r => r.name) select r;
var res=from r in resources where r.id==2&&r.name.Contains("小") orderby r.name descending select r;
6.join
var res = from r in stu join t in het on r.age equals t.age select r;
7.分组(group)
var tt = from r in stu group r by r.name;
foreach(var group in tt)
{
foreach(var item in group)
{
MessageBox.Show(item.name);
}
}
var countries = from r in stu
group r by r.age
into grderby g.Count() descending
where g.Count() >= 2
select new { age = g.Key };
foreach (var item in countries)
{
MessageBox.Show(item.age);
}
8.cast
List<object> list = new List<object> { "keyboard", "mouse", "joystick", "monitor" };
var rest = list.Cast<string>().Select(r => r.Substring(0, 2));
//cast用于control的datasoure,可实践一下
方法 | C# 查询表达式语法 |
---|---|
Cast | 使用显式类型化范围变量,例如:from int i in numbers |
GroupBy | group … by 或 group … by … into |
GroupJoin | join … in … on … equals … into … |
Join | join … in … on … equals … |
OrderBy | orderby |
OrderByDescending | orderby … descending |
Select | select |
SelectMany | 多个 from 子句。 |
ThenBy | orderby …, … |
ThenByDescending | orderby …, … descending |
Where | where |