概念:
LINQ(Language Integrated Query)是一种C#语言中的查询技术,它允许我们在代码中使用类似SQL的查询语句来操作各种数据源。这些数据源可以是集合、数组、数据库、XML文档等等。LINQ提供了一种统一的编程模型,使我们能够使用相同的方式来查询和操作不同类型的数据。
在C#中,LINQ主要由以下几个组成部分: 数据源(Data source):可以是集合、数组、数据库、XML文档等等。 查询变量(Query variable):用于存储查询结果的变量。 查询表达式(Query expression):类似于SQL语句的查询表达式,用于描述查询的逻辑和条件。 查询操作符(Query operator):用于执行各种查询操作,如筛选、排序、分组、投影等等。 查询结果(Query result):查询操作的返回结果。
其中数据源,查询变量,查询结果是必选项,查询表达式,查询操作符是可选项。
分类
LINQ To Entities:
LINQ to Entities 是 Entity Framework 的一部分并且取代 LINQ to SQL 作为在数据库上使用 LINQ 的标准机制。Entity Framework 是行业领先的对象-关系映射(ORM)系统。可以和多种数据库一起使用,并支持各种灵活、复杂的数据模型 LINQ To Objects :
主要负责对象的查询(是指直接对任意IEnumerable集合使用LINQ查询,无需使用中间LINQ程序或API。LINQ To Object 提供的是内存中集合数据的实体映射. LINQ To XML:
在System.Xml.LINQ命名空间下实现对XML的操作。采用高效、易用、内存中的XML工具在宿主编程语言中提供XPath/XQuery功能等
基础语法使用

LINQ使用方式1:使用LINQ查询表达式
- LINQ 查询表达式是一种类似 SQL 的语法,用于从各种数据源(如数组、集合等)中查询数据。
- 在代码中,通过
from、where、orderby、select等关键字来构建查询,从scores、names、students等数据源中筛选、排序数据,然后获取结果并进行输出等操作。
private void button1_Click(object sender, EventArgs e)
{
int[] scores = new int[] { 98, 45, 77, 888, 81, 51 };
//注意:命名空间
//from关键字 从哪里查
//s查询变量 查询变量名和命名相同
//in 在那个数据源中查询
//scores 数据源(数组 集合 sql数据库 xml文档)
//数据源后面 是查询条件 和sql的查询条件类似
//筛选条件: == != > < >= <= 逻辑运算符 && || !
IEnumerable<string> query = from s in scores
where s>=50 && s<=100
// 默认是ascending 升序 descending 降序
orderby s descending
select s + "分";
Console.WriteLine(query.ToList()[0]);
Console.WriteLine(query.ToList().Count);
foreach (string i in query)
{
Console.WriteLine(i);
}
string[] names = { "吴亦凡", "罗志祥", "李云迪" };
//查询表达式中的重要子句 from子句 where子句 select子句 orderby子句 group子句
IEnumerable<string> query1 = from n in names
//查询以"凡"结尾的字符串
// where n.EndsWith("凡")
//where n.IndexOf("吴")!=-1
where n.StartsWith("罗")
select n;
Console.WriteLine(query1.Count());//长度
foreach (string i in query1)
{ Console.WriteLine(i); }
Student[] students = {
new Student(){Id=1,Name="吴亦凡",Favorites=new string[]{ "写代码1","打游戏1"} },
new Student(){Id=2,Name="蔡徐坤",Favorites=new string[]{ "写代码2","打篮球2","打游戏2"} },
new Student(){Id=3,Name="罗志祥",Favorites=new string[]{ "写代码3","打篮球3","打游戏3"} },
};
//如果有多个数据源 一般后面的数据源能使用前面数据源中的数据 反过来不行
//只能有一个结果集
var query2 =from s in students //第一个数据源 类型Student
where s.Name== "吴亦凡" //对第一个数据源筛选
from f in s.Favorites //第二个数据源 类型 string[]
where f.Contains("打篮球")//对第二个数据源筛选
select f;//结果集
foreach (var i in query2)
{ Console.WriteLine(i); }
}

LINQ使用方式1:使用扩展方法
- LINQ 扩展方法是一系列定义在
IEnumerable<T>等接口上的方法(如Where、OrderByDescending、Select等),可以通过方法链的形式来对数据源进行操作。 - 在代码中,通过调用
ints的Where方法筛选元素,再调用OrderByDescending方法进行降序排序,最后调用Select方法进行投影,从而得到结果并输出。
private void button2_Click(object sender, EventArgs e)
{
int[] ints = { 1, 2, 3,6,5,7 };
//Where() 高阶函数 筛选 和Find 类似
//Where(Func) 相当于是 where子句
//IEnumerable<int> query1 = ints.Where((item) => { return item >= 2; });
//IEnumerable<int> query2 = ints.Where(v => v >= 2);
//OrderBy 升序 等同于 orderby ascending
//OrderByDescending 降序 等同于 orderby descending
IEnumerable<int> query2 = ints.Where(v => v >= 2).OrderByDescending(v=>v).Select(v=>v);
foreach (var i in query2)
{
Console.WriteLine(i);
}
}

1104

被折叠的 条评论
为什么被折叠?



