C# LINQ常用语法

1. LINQ 基础概念

LINQ (Language Integrated Query) 是 C# 中用于数据查询的语法,可以查询各种数据源(数组、集合、数据库等)。

2. 基本语法结构

查询表达式语法(类似 SQL)

csharp 复制代码
from 变量 in 数据源
where 条件
orderby 字段
select 结果

方法语法(使用 Lambda 表达式)

csharp 复制代码
数据源.方法(参数 => 表达式)

3. 常用的 LINQ 方法

筛选数据 - Where

csharp 复制代码
// 查询表达式
var result = from num in numbers
             where num > 5
             select num;

// 方法语法
var result = numbers.Where(num => num > 5);

排序 - OrderBy / OrderByDescending

csharp 复制代码
// 升序
var result = numbers.OrderBy(num => num);

// 降序
var result = numbers.OrderByDescending(num => num);

// 多字段排序
var result = students.OrderBy(s => s.Age)
                    .ThenBy(s => s.Name);

选择数据 - Select

csharp 复制代码
// 选择特定字段
var names = students.Select(s => s.Name);

// 创建新对象
var studentInfo = students.Select(s => new {
    Name = s.Name,
    Age = s.Age
});

其他常用方法

csharp 复制代码
// 取前N个
var top3 = numbers.Take(3);

// 跳过前N个
var afterFirst3 = numbers.Skip(3);

// 判断是否存在
bool hasEven = numbers.Any(n => n % 2 == 0);

// 判断是否所有元素都满足条件
bool allPositive = numbers.All(n => n > 0);

// 获取第一个元素
var first = numbers.First();

// 获取最后一个元素
var last = numbers.Last();

// 计数
int count = numbers.Count();

// 求和
int sum = numbers.Sum();

// 最大值
int max = numbers.Max();

// 最小值
int min = numbers.Min();

// 平均值
double average = numbers.Average();

4. 实际应用示例

学生数据示例

csharp 复制代码
class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Score { get; set; }
}

List<Student> students = new List<Student>
{
    new Student { Name = "Alice", Age = 20, Score = 85 },
    new Student { Name = "Bob", Age = 22, Score = 90 },
    new Student { Name = "Charlie", Age = 19, Score = 78 }
};

常见查询操作

csharp 复制代码
// 1. 筛选年龄大于20的学生
var olderStudents = students.Where(s => s.Age > 20);

// 2. 按分数降序排序
var sortedByScore = students.OrderByDescending(s => s.Score);

// 3. 选择学生姓名和分数
var nameScores = students.Select(s => new { 
    s.Name, 
    s.Score 
});

// 4. 获取分数最高的学生
var topStudent = students.OrderByDescending(s => s.Score).First();

// 5. 计算平均分
var averageScore = students.Average(s => s.Score);

// 6. 分组查询
var groupByAge = students.GroupBy(s => s.Age);

5. 在数组和集合中的应用

数组操作

csharp 复制代码
csharp
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 获取偶数
var evenNumbers = numbers.Where(n => n % 2 == 0);

// 平方每个数
var squares = numbers.Select(n => n * n);

// 获取大于5的数并排序
var result = numbers.Where(n => n > 5)
                   .OrderBy(n => n);

字符串数组

csharp 复制代码
string[] names = { "Alice", "Bob", "Charlie", "David" };

// 查找以A开头的名字
var aNames = names.Where(name => name.StartsWith("A"));

// 按长度排序
var sortedByLength = names.OrderBy(name => name.Length);
相关推荐
cyh男9 天前
lucene中AutomatonQuery类的作用
lucene
cyh男9 天前
lucene中的PointRangeQuery和PointInSetQuery有什么区别
lucene
cyh男10 天前
为什么ES中不推荐使用wildcard查询
elasticsearch·lucene
渣渣盟11 天前
中文分词技术全解析
搜索引擎·全文检索·lucene
cyh男24 天前
lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比
lucene
cyh男25 天前
Lucene 8.7.0 版本中dvd、dvm文件详解
lucene
是犹橐籥1 个月前
头歌Educoder答案 Lucene - 全文检索入门
搜索引擎·全文检索·lucene
cyh男1 个月前
Lucene 8.7.0 版本中docFreq、totalTermFreq、getDocCount等方法的含义
lucene
李白你好1 个月前
Solr任意文件读取-快速利用工具
solr