语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic
和可能的任何其他 .NET 语言)的基础上。 借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。
对于编写查询的开发人员来说,LINQ 最明显的“语言集成”部分是查询表达式。
查询表达式是使用 C# 3.0 中引入的声明性查询语法编写的。
通过使用查询语法,您甚至可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。
您使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO.NET 数据集、XML 文档和流以及 .NET 集合中的数据。
LINQ的基本格式如下所示:
var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式>
group分组子句
语句格式:var str = from p in PersonList group p by p.age
group子句将数据源中的数据进行分组,在遍历数据元素时,并不像前面的章节那样直接对元素进行遍历,因为group子句返回的是元素类型为IGrouping<TKey,TElement>的对象序列,必须在循环中嵌套一个对象的循环才能够查询相应的数据元素。
在使用group子句时,LINQ查询子句的末尾并没有select子句,因为group子句会返回一个对象序列,通过循环遍历才能够在对象序列中寻找到相应的对象的元素,如果使用group子句进行分组操作,可以不使用select子句。
orderby排序子句
语句格式:var str = from p in PersonList orderby p.age select p;
orderby子句中使用descending关键字进行倒序排列
示例代码如下:
var str = from p in PersonList orderby p.age descending select p;
orderby子句同样能够进行多个条件排序,只需要将这些条件用“,”号分割即可
示例代码如下:
var str = from p in PersonList orderby p.age descending,p.name select p;
join连接子句
在LINQ中同样也可以使用join子句对有关系的数据源或数据对象进行查询,但首先这两个数据源必须要有一定的联系
var str = from p in PersonList join car in CarList on p.cid equals car.cid select p;
1,数组 或者list的筛选
public int[] scores = { 90, 92, 42, 100,46, 37, 32,70, 74, 5, 16, 32 };
IEnumerable<int> scoreQuery =
from score in scores //必须
where score > 40 //可选条件 筛选 分数大于 40
orderby score descending //可选条件
select score; //必须
foreach (int score in scoreQuery)
{
richTextBox_after.AppendText(score.ToString());
richTextBox_after.AppendText("\r\n");
}
int hightestScore = scores.Max();
richTextBox_after.AppendText("最大值:" + hightestScore.ToString());
2,字典 筛选
public Dictionary<string, int> stutents = new Dictionary<string, int>()
{
{"lisi",12 },
{"zhansan",20 },
{"wangwu",90 },
{"laowang",35 }
};
var age = from student in stutents
where student.Value > 30 //查找值大于 30 的
orderby student.Value ascending //升序
select student.Value; //选择 value
var list = age.ToList<int>(); //转为 list类型
foreach (var student in list)
{
richTextBox_after.AppendText(student.ToString());
richTextBox_after.AppendText("\r\n");
}
3,类,对象 筛选
public class Animal
{
public string ID;
public string type;
public string area;
public string name;
public int age;
public string sex;
public string ToString()
{
return $"ID :{ID} type:{type} area:{area} name:{name} age:{age} sex:{sex}";
}
}
private List<Animal> _monkey;
_monkey = new List<Animal>();
Animal m1 = new Animal()
{
ID = "1001",
type = "金丝猴",
area = "云南",
name = "小金",
age = 8,
sex = "male"
};
Animal m2 = new Animal()
{
ID = "1002",
type = "黒叶猴",
area = "贵州",
name = "小黑",
age = 2,
sex = "woman"
};
Animal m3 = new Animal()
{
ID = "1003",
type = "猩猩",
area = "非洲",
name = "小猩",
age = 12,
sex = "woman"
};
Animal m4 = new Animal()
{
ID = "1004",
type = "狒狒",
area = "南美",
name = "小狒",
age = 15,
sex = "man"
};
Animal m5 = new Animal()
{
ID = "1005",
type = "飞猴",
area = "广西",
name = "小飞",
age = 6,
sex = "man"
};
_monkey.Add(m1);
_monkey.Add(m2);
_monkey.Add(m3);
_monkey.Add(m4);
_monkey.Add(m5);
var seletData = from monkey in _monkey
where monkey.age > 5 //选择年龄大于 5 的 monkey
orderby monkey.age descending //年龄降序
select monkey;
var list = seletData.ToList<Animal>();
foreach (var animal in list)
{
richTextBox_after.AppendText(animal.ToString());
richTextBox_after.AppendText("\r\n");
}