有这样一个案例:
var filteredResult = from f in orgFileList select f; for (int i = 0; i < WorkStatusFilters.ListWorkStatus.Count; i++) { if( !WorkStatusFilters.ListWorkStatus[i].checkStatus) filteredResult = filteredResult.Where(f => f.WorkStatusFlag != i.ToString()); }
这段代码的本意是筛选掉指定workstatusFlag的数据,但由于延迟执行的机制,使得该linq查询结果至少在for循环结束后才真正的执行,而这个时候i作为局部变量已经取不到值了。本应该是如下的查询:
filteredResult = filteredResult.Where(f => f.WorkStatusFlag != "0").Where(f => f.WorkStatusFlag != "2").Where(f => f.WorkStatusFlag != "5");
实际结果却是:
filteredResult = filteredResult.Where(f => f.WorkStatusFlag != null ).Where(f => f.WorkStatusFlag != null).Where(f => f.WorkStatusFlag != null);
从而导致莫名的数据异常。
此处我的修正建议是:显示调用 toList:
var filteredResult = from f in orgFileList select f; for (int i = 0; i < WorkStatusFilters.ListWorkStatus.Count; i++) { if( !WorkStatusFilters.ListWorkStatus[i].checkStatus) filteredResult = filteredResult.Where(f => f.WorkStatusFlag != i.ToString()).ToList(); }
但这样做会牺牲一些性能,在大数据量时体现比较明显。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理