Contains 方法,如 list.Where(item => item.Contains("keyword"))。LINQ包含查询
一、LINQ查询表达式基础
1、数据源:LINQ查询始终将源数据视为IEnumerable<T>或IQueryable<T>集合,这些集合可以是内存中的数据(如数组、列表)或支持LINQ的数据源(如数据库、XML文档)。
2、基本子句:LINQ查询表达式包含多个基本子句,包括from(指定数据源和范围变量)、select(指定返回元素的类型和形式)、where(应用筛选条件)、orderby(对结果排序)、group(分组操作)、join(连接两个数据源)、let(引入范围变量存储子表达式结果)和into(标识符,用于引用join、group或select子句的结果)。
3、示例:以下示例展示了一个简单的LINQ查询,该查询从整数数组中筛选出所有偶数。
int[] numbers = { 0, 1, 2, 3, 4, 5, 6 };
var numQuery = from num in numbers where (num % 2) == 0 select num;
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
// Output: 0 2 4 6
二、常用操作
1、过滤操作:使用where子句根据一个或多个条件筛选元素,从学生列表中筛选出年龄大于18岁的学生。
var result = from student in students where student.Age > 18 select student.Name;
2、排序操作:使用orderby或orderbyDescending子句按升序或降序排序,按年龄对学生进行升序排序。
var sortedStudents = from student in students orderby student.Age select student;
3、分组操作:使用group子句根据指定属性对结果进行分组,按部门对学生进行分组。

var groupedStudents = from student in students group student by student.Department into g select new { Key = g.Key, Students = g };
4、连接操作:使用join子句基于相等比较连接两个数据源,将学生与课程通过学生ID连接起来。
var joinedData = from student in students join course in courses on student.CourseId equals course.Id select new { StudentName = student.Name, CourseName = course.CourseName };
5、聚合操作:计算总和、计数、最小值、最大值及平均值等,计算学生的最高分。
var maxScore = students.Max(student => student.Score);
三、延迟执行与立即执行
1、延迟执行:LINQ查询在迭代时才会执行,这意味着只有在需要结果时才会运行查询,这允许在查询变量上进行进一步的操作,如排序或过滤。
var query = from student in students where student.Age > 18 select student;
var adultStudents = query.Where(student => student.Name.StartsWith("A"));
2、立即执行:某些LINQ操作会立即执行并返回单个标量值。Count()、Max()、Average()和First()等方法会立即返回结果。
int count = students.Count(student => student.Age > 18);
四、标准查询运算符

1、方法语法:LINQ还提供了方法语法来执行相同的操作,上述过滤操作可以使用方法语法重写为。
var result = students.Where(student => student.Age > 18).Select(student => student.Name);
2、扩展方法:LINQ提供了大量的扩展方法来实现标准查询运算符,如Where、Select、OrderBy等,这些方法可以直接调用在实现了IEnumerable<T>接口的对象上。
var filteredStudents = students.Where(student => student.Age > 18);
五、示例代码与解释
1、示例代码:以下示例演示了一个完整的LINQ查询操作,包括创建数据源、定义查询表达式和执行查询。
int[] scores = { 97, 92, 81, 60 };
IEnumerable<int> scoreQuery = from score in scores where score > 80 select score;
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
// Output: 97 92 81
2、解释:在这个示例中,我们首先定义了一个整数数组作为数据源,我们使用LINQ查询表达式来筛选出所有大于80的分数,我们使用foreach循环来迭代查询结果并打印每个分数。
六、相关问题与解答

1、问题:什么是LINQ中的延迟执行?为什么它很重要?
回答:LINQ中的延迟执行指的是查询在实际需要结果时才会执行的特性,这允许在查询变量上进行进一步的操作,如排序或过滤,而不会立即执行查询,延迟执行对于构建复杂查询和提高性能非常重要。
2、问题:如何将LINQ查询转换为方法语法?
回答:要将LINQ查询转换为方法语法,可以将查询表达式中的子句替换为相应的扩展方法调用,将from...where...select查询转换为Where和Select方法调用。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/147521.html