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);
相关推荐
sunxunyong13 天前
ranger与solr&ldap&doris集成部署
solr·lucene
编码者卢布14 天前
【Azure AI Search】Index的字段使用默认Analyzer(standard.lucene) 和 en.microsoft 有什么不同?
microsoft·lucene·azure
2601_9618752417 天前
法考资料电子版|pdf|资料已整理
elasticsearch·搜索引擎·pdf·全文检索·solr·lucene·sphinx
2601_9618454217 天前
考研公共课资料推荐|英语数学政治|电子版|资料已整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
解决问题no解决代码问题17 天前
漏洞详解|CVE-2026-44825 Apache Solr 隐藏默认账号漏洞(附检测+修复全套方案)
apache·solr·lucene
2601_9618454220 天前
高考真题下载|2025高考全科真题网盘分类整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
2601_9611940223 天前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene
2601_961194021 个月前
考研模拟卷谁的比较好|27李林合工大肖四肖八数学英语408PDF
考研·elasticsearch·全文检索·代理模式·lucene·桥接模式·访问者模式
醉颜凉1 个月前
Lucene底层原理:倒排索引实现原理与代码实战,彻底吃透搜索引擎核心
搜索引擎·mybatis·lucene
risc1234561 个月前
DocumentsWriterFlushQueue
lucene