LINQ(Language Integrated Query)是.NET Framework中用于数据查询的组件,它将查询功能集成到C#等.NET语言中。LINQ提供了丰富的查询操作符,这些操作符可以应用于各种数据源,如内存中的集合、数据库、XML等。以下是一些LINQ的常用方法:
目录
1. 基本查询方法
2. 元素选择与投影
3. 分页与跳过元素
4. 排序
5. 集合操作
6. 分组与去重
7. 转换与聚合
8. 特定操作
1. 基本查询方法
- Where:用于限定输入集合中的元素,将符合条件的元素组织成一个序列结果。
- Select:用于根据输入序列中的元素创建相应的输出序列中的元素,输出序列中的元素类型可以与输入序列中的元素类型相同,也可以不同。
- SelectMany:与Select类似,但可以根据输入序列中的每一个元素,在输出序列中创建相应的零个或多个元素。
2. 元素选择与投影
- First/FirstOrDefault:返回序列中的第一个元素,FirstOrDefault在序列为空时返回默认值(对于引用类型为null,对于值类型为该类型的默认值)。
- Single/SingleOrDefault:返回序列中的唯一元素,如果序列为空或包含多个元素,则Single会抛出异常,而SingleOrDefault在序列为空时返回默认值。
3. 分页与跳过元素
- Take:从输入序列中返回指定数量的元素,常用于分页。
- Skip:从输入序列中跳过指定数量的元素,返回由序列中剩余的元素所组成的新序列。
- SkipWhile:从输入序列中跳过满足一定条件指定数量的元素。
4. 排序
- OrderBy:对输入序列中的元素进行排序,基于一个委托方法的返回值顺序。
- OrderByDescending:与OrderBy类似,但按降序排序。
- ThenBy和ThenByDescending:用于在OrderBy或OrderByDescending之后,根据另一个条件对序列进行进一步排序。
5. 集合操作
- Concat:连接两个序列,生成一个新序列。
- Union:将两个序列中的元素合并成一个新的序列,新序列将自动去除重复的元素。
- Intersect:将两个输入序列中的重复元素挑选出来,生成一个新的集合,即求交集。
- Except:返回两个序列中存在于第一个序列但不存在于第二个序列的元素所组成的新序列。
6. 分组与去重
- GroupBy:类似于SQL语言中的Group By语句,用于将输入序列中的元素进行分组。
- Distinct:类似于SQL语句中的Distinct语句,用于去除一个序列中的重复元素。
7. 转换与聚合
- Cast:将一个类型为IEnumerable的集合对象转换为IEnumerable<T>类型的集合对象。
- OfType:与Cast类似,但更加安全,仅会将能够成功转换的元素进行转换。
- AsEnumerable:将一个实现了IEnumerable<T>接口的对象转换成一个标准的IEnumerable<T>接口对象。
- Aggregate:对序列中的元素进行累积操作,如求和、求积等。
8. 特定操作
- Join:类似于SQL语句中的Join语句,用于连接两个输入序列。
- GroupJoin:也用于连接两个输入序列,但与Join不同,它允许将outer序列元素与对应的inner序列元素作为组一次性处理。
- Reverse:生成一个与输入序列中元素相同,但元素排列顺序相反的新序列。
LINQ的这些常用方法使得在.NET中查询和处理数据变得更加灵活和强大。它们可以被组合使用,以构建复杂的查询逻辑,满足各种数据处理需求。
例:用linq表达式查找一个集合元素不包含另一个集合元素
假设你有两个集合,每个集合的元素都是具有多个属性的对象,比如Person
对象,它们都有Name
和Age
属性。你想要从mainSet
中筛选出那些Name
和Age
都不与excludedSet
中任何Person
的Name
和Age
相匹配的人。
var filteredSet = mainSet.Where(p => !excludedSet.Any(ep => ep.Name == p.Name && ep.Age == p.Age)).ToList();