LINQ Intersect与Except深度解析:掌握这3个技巧让你的查询效率提升80%

第一章:LINQ Intersect与Except的基本概念

在 .NET 的 LINQ(Language Integrated Query)中,`Intersect` 和 `Except` 是两个用于集合操作的核心方法,它们允许开发者以声明式语法高效地处理数据交集与差集。这些方法适用于任何实现了 `IEnumerable` 接口的集合类型,常用于去重、数据比对和筛选场景。

Intersect 方法的作用

Intersect 返回两个集合中都存在的元素,即数学意义上的交集。该方法会自动去除重复项,并要求元素类型实现相等性比较逻辑。

// 示例:获取两个整数集合的交集
var firstSet = new[] { 1, 2, 3, 4 };
var secondSet = new[] { 3, 4, 5, 6 };
var intersection = firstSet.Intersect(secondSet); // 结果:{ 3, 4 }
// 执行逻辑:遍历 firstSet,仅保留同时存在于 secondSet 中且未重复的元素

Except 方法的作用

Except 返回出现在第一个集合但不在第二个集合中的元素,即差集运算。结果同样不包含重复元素。

// 示例:获取第一个集合相对于第二个集合的差集
var difference = firstSet.Except(secondSet); // 结果:{ 1, 2 }
// 执行逻辑:从 firstSet 中移除所有在 secondSet 中出现过的元素

常见使用场景对比

方法返回结果典型用途
Intersect共同元素用户权限比对、标签匹配
Except独有元素变更检测、增量同步
  • 两个方法均基于默认比较器进行值比较,若为引用类型需重写 Equals 和 GetHashCode
  • 结果序列不保证原始顺序,但通常维持第一个集合中元素首次出现的顺序
  • 支持自定义比较器,通过传入 IEqualityComparer<T> 实现复杂匹配逻辑

第二章:深入理解Intersect方法的工作机制

2.1 Intersect方法的底层实现原理

集合交集运算的核心逻辑
Intersect方法用于计算两个数据集的公共元素,其底层通常基于哈希表实现。通过遍历较小集合并查询其元素是否存在于较大集合中,可显著降低时间复杂度。
func Intersect(setA, setB map[int]bool) []int {
    var result []int
    // 确保遍历较小的集合以优化性能
    if len(setA) > len(setB) {
        setA, setB = setB, setA
    }
    for key := range setA {
        if setB[key] {  // 哈希查找 O(1)
            result = append(result, key)
        }
    }
    return result
}
上述代码通过哈希映射实现O(n)平均时间复杂度。参数`setA`与`setB`为布尔映射,表示整数集合,利用Go语言的map实现快速成员检测。
性能优化策略
  • 优先遍历较小集合,减少查找次数
  • 使用哈希结构确保单次查询时间接近常量
  • 预分配结果切片容量可进一步提升效率

2.2 如何利用自定义IEqualityComparer提升性能

在处理集合操作时,使用自定义 `IEqualityComparer` 可显著提升性能与逻辑准确性。
实现原理
通过重写 `Equals` 和 `GetHashCode` 方法,可定义对象的相等性规则,避免默认引用比较带来的误判。

public class PersonComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        return x.Id == y.Id && x.Name == y.Name;
    }

    public int GetHashCode(Person obj)
    {
        return HashCode.Combine(obj.Id, obj.Name);
    }
}
上述代码中,`PersonComparer` 定义了基于 `Id` 和 `Name` 的相等性判断。`GetHashCode` 使用 `HashCode.Combine` 生成高效哈希值,确保在哈希表中快速定位。
应用场景
  • 去重大型数据集中的重复对象
  • 在 Dictionary 或 HashSet 中使用复合键进行查找
该方式减少不必要的对象克隆与遍历,提升集合操作效率达数倍以上。

2.3 Intersect在集合去重场景中的高级应用

在处理大规模数据集时,Intersect操作不仅能识别共性元素,还可用于精细化去重。相较于简单的唯一值过滤,它能保留多个数据源间的交集部分,从而确保数据一致性。
去重与交集的协同机制
通过先分片再求交,可有效减少冗余数据传输。例如在分布式系统中,各节点先本地去重,再使用Intersect合并关键公共记录。

// 使用Go模拟两个去重后集合的交集
func intersectUnique(setA, setB []int) []int {
    seen := make(map[int]bool)
    for _, v := range setA {
        seen[v] = true
    }
    var result []int
    for _, v := range setB {
        if seen[v] {
            result = append(result, v)
            seen[v] = false // 避免重复添加
        }
    }
    return result
}
该函数首先将setA去重并存入哈希表,遍历setB时仅保留共现元素,实现高效交集提取。
性能对比
方法时间复杂度适用场景
全量排序去重O(n log n)小数据集
哈希去重 + IntersectO(n + m)大数据集、分布式

2.4 大数据量下Intersect的内存与时间开销分析

在处理大规模数据集时,`Intersect` 操作的性能表现直接受限于内存占用与计算复杂度。该操作需对两个数据集进行哈希构建与比对,导致空间开销显著上升。
时间复杂度分析
理想情况下,`Intersect` 的时间复杂度为 O(n + m),其中 n 和 m 分别为两数据集的记录数。但在实际执行中,哈希冲突和数据倾斜会使其退化至 O(n × m)。
内存使用模式
// Spark中Intersect的底层实现示意
val rdd1 = sc.parallelize(Seq(1, 2, 3, 4))
val rdd2 = sc.parallelize(Seq(3, 4, 5, 6))
val intersection = rdd1.intersection(rdd2)
上述代码在执行时,会将两个 RDD 的分区数据全部加载至内存构建哈希表,造成峰值内存使用翻倍。当数据量超过可用内存时,将触发频繁的磁盘溢写,显著拉长任务耗时。
  • 哈希表存储:每个元素需维护哈希索引与原始值
  • 中间状态缓存:Shuffle 过程产生大量临时文件
  • GC 压力:对象频繁创建与回收影响执行效率

2.5 实战案例:使用Intersect优化用户权限比对逻辑

在企业级权限系统中,频繁的用户角色权限比对常导致性能瓶颈。传统逐项比对方式时间复杂度高,可通过集合交集(Intersect)操作显著优化。
优化前的低效比对
原始实现采用遍历方式判断权限匹配:
// 伪代码示例
func hasCommonPermission(userPerms, requiredPerms []string) bool {
    for _, up := range userPerms {
        for _, rp := range requiredPerms {
            if up == rp {
                return true
            }
        }
    }
    return false
}
该方法在权限列表较长时性能急剧下降,时间复杂度为 O(n×m)。
使用Intersect提升效率
将权限数组转为集合后执行交集运算:
userSet := convertToSet(userPerms)
reqSet := convertToSet(requiredPerms)
inter := userSet.Intersect(reqSet)
return len(inter) > 0
利用哈希集合的 O(1) 查找特性,整体复杂度降至 O(n + m),大幅提升比对效率。
方案时间复杂度适用场景
嵌套遍历O(n×m)小规模数据
IntersectO(n + m)中大型系统

第三章:Except方法的核心行为解析

3.1 Except与Set差集运算的数学对应关系

在集合论中,差集运算 $ A \setminus B $ 表示包含所有属于 $ A $ 但不属于 $ B $ 的元素。这一概念在编程中被直接映射为 `Except` 操作,广泛应用于集合数据处理。
语言中的实现对比
  • C# 中的 Except() 方法返回两个序列中第一个独有的元素;
  • Python 使用集合的 difference() 或操作符 - 实现相同逻辑。
A = {1, 2, 3}
B = {2, 3, 4}
result = A - B  # 输出: {1}
该代码执行的是标准集合差运算,等价于数学表达式 $ A \setminus B $,仅保留属于 $ A $ 而不在 $ B $ 中的元素。
运算性质对照表
数学表示编程实现说明
$ A \setminus B $A.difference(B)非对称操作,不满足交换律

3.2 处理引用类型时的常见陷阱与解决方案

在操作引用类型时,开发者常因共享状态而引发意外的数据变更。对象或数组赋值仅传递引用,而非创建新实例,导致一处修改影响全局。
常见的误用场景

let original = { user: { name: 'Alice' } };
let copy = original;
copy.user.name = 'Bob';
console.log(original.user.name); // 输出:Bob
上述代码中,copy 与 original 指向同一内存地址,修改会同步反映。
推荐的解决方案
使用结构化克隆避免副作用:
  • 浅拷贝:Object.assign({}, obj) 或 {...obj}
  • 深拷贝:利用 JSON.parse(JSON.stringify(obj))(仅适用于可序列化数据)
  • 第三方库:如 Lodash 的 _.cloneDeep()
方法适用场景局限性
展开语法单层对象不处理嵌套引用
JSON 方法纯数据对象丢失函数、undefined、循环引用

3.3 结合匿名类型和投影操作提升查询表达力

在LINQ查询中,匿名类型与投影操作的结合能显著增强数据提取的灵活性。通过Select子句,开发者可将原始对象投影为仅包含所需属性的新结构,避免冗余数据传输。
匿名类型的语法与作用
匿名类型允许在不定义显式类的情况下创建临时对象,适用于一次性数据封装:

var result = employees.Select(e => new { 
    e.Name, 
    Department = e.Dept.Name, 
    YearsInCompany = DateTime.Now.Year - e.HireDate.Year 
});
上述代码创建了一个包含员工姓名、部门名称和在职年限的匿名对象。字段名可自定义(如Department),提升语义清晰度。
投影优化查询性能
使用投影可减少内存占用并加快数据处理速度。相比返回完整实体,仅选择必要字段更高效。
  • 降低序列化开销,尤其在Web API场景中
  • 简化前端数据绑定结构
  • 支持动态字段组合,适应多变业务需求

第四章:性能优化与最佳实践策略

4.1 预处理集合以减少比较次数的技巧

在处理大规模数据集合时,直接进行两两比较会导致时间复杂度急剧上升。通过预处理手段,可显著减少后续比较操作的次数。
排序后区间剪枝
对集合按关键字段排序,使得相似项聚集在一起。此后只需比较邻近元素,大幅降低无效比对。
  • 适用于字符串相似度、数值接近性等场景
  • 结合滑动窗口机制,仅在局部范围内进行匹配
哈希分桶
利用哈希函数将数据映射到不同桶中,仅在同桶内进行比较。
// 使用前缀哈希分组
func hashKey(s string) string {
    if len(s) < 3 {
        return s
    }
    return s[:3] // 前三字符作为桶键
}
该函数将字符串按前三位分组,确保只有潜在相似项进入同一比较池,有效削减比较规模。配合倒排索引结构,可进一步加速查找过程。

4.2 利用哈希集(HashSet)预构建提升执行效率

在处理大规模数据去重或频繁查找操作时,直接遍历数组会导致时间复杂度升至 O(n)。为优化性能,可预先将数据载入哈希集(HashSet),利用其平均 O(1) 的查询特性显著提升执行效率。
典型应用场景
例如,在判断多个元素是否存在于集合中时,使用 HashSet 预加载可避免重复扫描原始列表。

Set<Integer> cache = new HashSet<>(Arrays.asList(1, 3, 5, 7, 9));
// 查找操作时间复杂度降为 O(1)
boolean exists = cache.contains(5);
上述代码通过初始化 HashSet 实现数据预构建,contains() 方法基于哈希表实现,避免了线性搜索。尤其当查询操作远多于插入时,该策略优势明显。
  • 适用于静态或低频更新的数据集
  • 节省重复计算开销,提升响应速度

4.3 避免常见LINQ查询误区以降低复杂度

避免在查询中重复执行高成本操作
频繁在 Where 或 Select 中调用外部方法或属性,会导致 LINQ 查询性能急剧下降。应提前缓存计算结果。
// 错误示例:每次遍历都调用 DateTime.Now
var results = data.Where(x => x.CreatedDate < DateTime.Now.AddDays(-7));

// 正确做法:提前计算阈值
var threshold = DateTime.Now.AddDays(-7);
var results = data.Where(x => x.CreatedDate < threshold);
将可复用的计算移出查询表达式,显著减少重复开销,提升执行效率。
合理选择查询语法形式
方法语法通常比查询语法更直观且易于调试。过度嵌套的 from 子句会增加理解难度。
  • 优先使用方法链(如 Where、Select)提高可读性
  • 避免多层匿名类型嵌套导致类型膨胀
  • 及时调用 ToList() 控制延迟执行范围

4.4 在EF Core中安全使用Intersect与Except的指导原则

理解集合操作的语义差异
在EF Core中,Intersect 与 Except 分别用于获取两个查询结果的交集与差集。它们依赖数据库底层的 INTERSECT 和 EXCEPT SQL 操作符,因此实体必须支持相等性比较。
  • Intersect 返回同时存在于两个集合中的元素
  • Except 返回仅存在于第一个集合中的元素
  • 结果去重且依赖数据库对行值的比较能力
确保实体可比较性
为避免意外行为,参与操作的实体应具备完整且一致的字段映射。推荐使用匿名类型或DTO以明确比较范围。

var query1 = context.Products.Select(p => new { p.Id, p.Name });
var query2 = context.ArchivedProducts.Select(p => new { p.Id, p.Name });

var common = query1.Intersect(query2).ToList();
上述代码通过投影到匿名类型,确保只比较 Id 和 Name 字段,规避导航属性引发的不可预测比较。同时,显式指定列有助于提升SQL生成的可靠性与性能。

第五章:总结与未来应用场景展望

边缘计算与AI模型的融合
随着物联网设备数量激增,边缘侧实时推理需求显著上升。将轻量化AI模型部署至边缘网关已成为主流趋势。例如,在工业质检场景中,使用TensorFlow Lite在树莓派上运行YOLOv5s进行缺陷检测:

import tflite_runtime.interpreter as tflite
interpreter = tflite.Interpreter(model_path="yolov5s_quantized.tflite")
interpreter.allocate_tensors()

input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# 前处理输入图像
input_data = preprocess(image).astype(np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()
detections = interpreter.get_tensor(output_details[0]['index'])
跨平台开发框架的演进
现代应用需覆盖移动端、Web与桌面端。Flutter通过统一渲染引擎实现高性能跨端体验。以下为常见平台支持能力对比:
平台热重载原生性能插件生态
Flutter✅⭐️⭐️⭐️⭐️丰富
React Native✅⭐️⭐️⭐️极丰富
Kotlin Multiplatform⚠️有限⭐️⭐️⭐️⭐️⭐️发展中
云原生架构下的服务治理
微服务广泛采用Kubernetes进行编排,配合Istio实现流量控制。典型灰度发布流程如下:
  1. 部署新版本Pod并打标签 version=v2
  2. 配置Istio VirtualService路由规则
  3. 逐步将5%流量导向v2版本
  4. 监控Prometheus指标与日志反馈
  5. 确认稳定后全量切换
产业园区如何高效对接企业技术需求与高校科研成果?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ef linq 中判断实体中是否包含某集合

我有一个需求,问题有很多标签,在查询时,需要筛选包含查询标签的一个集合(List<int>),以前的做法是先查询出来符合查询标签条件的标签id的结果集A,再查询问题时,加上判断是否包含该标签或者查询问题编号是否在结果集A中,这种方法实在是不得已之举。今天经过不断试验,发现可以通过使用linq的except来实现一次性查询出结果。··· 集合.WhereIf(input.Tags != ...

weixin_30652897的博客 849

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

.NET EF(Entity Framework)详解

一丶Entity Framework (一)EF简介 (1)ORM:Object Relation Mapping ,通俗说:用操作对象的方式来操作数据库。 (2)插入数据库不再是执行Insert,而是类似于Person p = new Person();p.Age=3;p.Name=“英莱特”;db.Save§;这样的做法。 (3)ORM工具有很多Dapper、PetaPoco、NHibernate,最首推的还是微软官方的Entity Framework,简称EF。 (4)EF底层仍然是对ADO.Net的

u013733643的博客 1万+

Windows 11下ROS2 Humble与PyCharm无缝集成实战(避坑指南+完整配置流程)

本文详细介绍了在Windows 11系统下如何实现ROS2 Humble与PyCharm的无缝集成,包括环境准备、ROS2 Humble安装、PyCharm配置以及C++与Qt5混合开发的实战技巧。通过避坑指南和完整配置流程,帮助开发者高效搭建稳定的机器人开发环境,特别适合Windows平台的ROS2开发者。

weixin_28710999的博客 367

codesys多协议通信之OPC UA通信

测试不易,转载请注明出处!

weixin_44243068的博客 3637

关于使用ef框架所踩的坑

ef框架使用linq和sql语言来进行查询数据库, 但进行非映射对象查询使用sql语句来进行查询时.例如: using (var item= new BloggingContext()) { var array= context.Database.SqlQuery<string>( "SELECT Namevalue FROM dbo.XXX").ToList(); } 注意啊!!! 这里的映射的类是Database类,就算SQL是进行非查询

weixin_43591127的博客 774

Qt5开发从入门到精通——第一篇概述

Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形用户界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。在Qt程序开发过程中,除可以通过手写代码实现软件开发功能外,还可以通过Qt的GUI界面设计器(QtDesigner)进行界面的绘制和布局。该工具提供了Qt的基本可绘制窗口部件,如QWidget、QLabel、QPushButton和QVBoxLayout等。•对象查看器•属性编辑器。.........

weixin_44759598的博客 9509

LINQ的Except方法

在两个集合中,左边集合减去右边集合的元素:   source code: List&lt;int&gt; a = new List&lt;int&gt;{ { 3 }, { 5 }, { 7 } }; List&lt;int&gt; b = new List&lt;int&gt; { ...

weixin_33701564的博客 1263

LTSPICE使用教程:导入第三方库模型进行仿真

LTSPICE导入第三方SPICE模型进行仿真,以英飞凌的第三方.lib模型为实例进行详解

焊武大帝的专栏 3万+

技术美术个人笔记(十六)——Houdini到UE的大地形

文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形

小谁的博客 3180

EF Core之SqlException处理

EF Core之SqlException处理 外键,唯一约束等对后端检查起到了很多的帮助,但有的时候需要后端直接将报错信息反馈给前端。这个时候直接返回SqlException就不合适了,需要对其进行翻译,返回可读的信息 EF Core的SqlException的全局处理还是要在DBContext里进行 SaveChanges就是我们要处理的地方,EF Core对应的Exception是...

2ker的博客 1983

【Ranger】mac下Apache Ranger编译安装

a、编译过程中出现测试用例不通过和文件认证错误错误:带上参数-DskipTests=true -Drat.skip=true 重新编译;b、若编译过程中出现缺少jar包的情况,可能下载不了,需要手动自动添加;c、编译所需的其他工具如maven等安装配置略。采用这个会报错,因此我才用了下面一个命令。初始化设置Ranger Admin:执行。然后进入target目录。

九师兄 2104

EF异常捕捉

try{//写数据库}catch(DbEntityValidationExceptiondbEx){} 转载于:https://www.cnblogs.com/chiy/p/6514577.html

weixin_30832983的博客 503

【基于 CasADi 的欠驱动无人船实时非线性模型预测控制(NMPC)实现与避碰仿真】MATLAB开源复现

本文提出了一种基于CasADi的欠驱动无人船实时非线性模型预测控制(NMPC)方法,实现了轨迹跟踪与避碰功能。研究采用三自由度USV动力学模型,集成静态与动态障碍物避碰约束,并满足国际海上避碰规则(COLREGS)。通过CasADi+IPOPT数值优化求解,实现了毫秒级实时控制。文章详细介绍了USV建模、NMPC控制器设计、避碰约束建模以及CasADi实现流程,包括核心求解流程和轨迹生成方法。实验结果表明,该方法能有效实现复杂环境下的轨迹跟踪与避碰功能。

vor234的博客 1397

pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)

【代码】pytest学习和使用19-pytes断言失败后,怎样保持后续的断言继续执行?

虫无涯的博客 1390

Linq 利用Except 去除重复数据并返回唯一数据( IEqualityComparer扩展)

前段时间做一个项目就是定时下载节目列表进行对文件时间和名字进行新旧对比进行去重复,众所周知,我们在Linq中去重复数据都用Distinct()做。但如果想多个条件进行对比去除重复数据,我们应该怎么办呢?请看下文,利用Except (通过使用默认的相等比较器对值进行比较,生成两个序列的差集。)_ // // 摘要: // 通过使用默认的相等比较器对值进行比较...

kongwei521的专栏 2023

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LINQ Except简单用法

LINQ Except 直接贴代码 int[] arr1=new int[]{1,2,3}; int[] arr2=new int[]{3,4,5,6}; int[] arr3=arr1.Except(arr2).ToArray(); Debug.WriteLine(string.Join(",", arr3));//1,2 得到的是arr1中,剔除和arr2重复的项目后,剩下部分组成的新数组 上面的数组int[]改成列表List int也可以得到相同的结果 但是不能用在引用对象的List上面!!!

woflyoycm的博客 1253

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

一道简单的C#测试题 C#Except

题目很简单 例如有2个集合   List listA = new List { "a", "b", "c", "d", "e" };             List listB = new List { "a", "b", "f" }; 需要找出在listA中存在,在listB中不存在的元素。 实现方式一:    List b = new List();             f

dz45693的专栏 4772

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

关于EF4里的 “关系”删除行为的解释

关于EF4里,对于拥有外键约束的实体,删除操作的行为及解释!(因为是翻墙找到的文章,所以复制过来方便大家查阅。) [ 自己的总结:在master-detail结构的表处理时,例如下面例3的Order-OrderDetail,如果从某一个Order实体的OrderDetail集合

我的博客 7293

EF 常见异常总结

问题:System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; System.InvalidOperationException: The class 'xxxx' has no parameterless constructor. ...

weixin_34190136的博客 700

EF linq常用语法

1.Any判断集合是否包含元素,返回值是bool,一般比count()>0效率高.Any还可以指定条件表达式. bool b=list.Any(p=>p.Age>50) 等价于 bool b=list.Where(p=>p.Age>50).Any 2.distinct()剔除完全重复的数据 3.order by list.orderby(c=>c.Age).thenBy(p=>p.Salary) 4.lis.Skip(3).Take(2) Skip(n)跳

weixin_44408363的博客 512

C# Linq 交集、并集、差集、去重

using System.Linq;         List ListA = new List(); List ListB = new List(); List ListResult = new List();         ListResult = ListA.Distinct().ToList();//去重 ListResult = ListA.Except(ListB).ToList()

每天进步一点点 2万+
上一篇: WinUI 3响应式布局进阶之路:5个你必须掌握的断点控制技巧
下一篇: 揭秘PHP 8.0命名参数顺序:为何它能彻底改变你的函数调用方式?
codetrick
博客等级 码龄17年 151粉丝 1991原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值