Linq调试实时输出信息扩展方法(摘抄)
原文在此
[译]如何在C#中调试LINQ查询
原linq语句:
var res = employees
.Where(e => e.Gender == "Male")
.Take()
.Where(e => e.Salary > avgSalary)
.OrderBy(e => e.Age);
扩展方法:
public static IEnumerable<T> LogLINQ<T>(this IEnumerable<T> enumerable, string logName, Func<T, string> printMethod)
{
#if DEBUG
int count = ;
foreach (var item in enumerable)
{
if (printMethod != null)
{
Debug.WriteLine($"{logName}|item {count} = {printMethod(item)}");
}
count++;
yield return item;
}
Debug.WriteLine($"{logName}|count = {count}");
#else
return enumerable;
#endif
}
使用方法
var res = employees
.LogLINQ("source", e => e.Name)
.Where(e => e.Gender == "Male")
.LogLINQ("logWhere", e => e.Name)
.Take()
.LogLINQ("logTake", e => e.Name)
.Where(e => e.Salary > avgSalary)
.LogLINQ("logWhere2", e => e.Name)
.OrderBy(e => e.Age);
说明和解释:
在LINQ查询中的每个操作之后放置
LogLINQ
方法。它可以选择打印通过此操作的所有项目和总数。logName
是每个输出的前缀,可以轻松查看编写它的查询步骤。我喜欢将其命名为之后操作相同的名称。Fun<T,string>printMethod
允许打印给定项目的任何内容。在上面的示例中,我选择使用e=>e.Name
打印员工的姓名,当为null
时,除总数外,不会打印任何内容。为了优化,此方法尽在调试模式下有效(
#if DEBUG
)。在发布模式下,它什么都不做。每个项目都按顺序打印,无需等待操作结束,这是因为LINQ的
lazy
特性。以下是查看单个操作结果的提示:将整个输出复制到notepad++
。然后使用Ctrl+Shift+F(Find)并查找日志前缀(例如logWhere2
)。在查找对话框,点击Find All in Current Document。这将仅显示与日志名称前缀匹配的行。
Linq调试实时输出信息扩展方法(摘抄)的更多相关文章
- C#实现隐藏手机号、邮箱、姓名等敏感信息扩展方法
还是老惯例,直接上代码. 最终效果图: public static class HideSensitiveInfoExtension { /// <summary> /// 隐藏敏感信息 ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- Linq快速入门——扩展方法
Linq为我们提供了许多扩展方法,方便我们对数据源进行操作(Where,Select...).即使你不了解算法,也能使用Linq当回牛人.扩展方法本质并不是什么高深的技术,说白了就是一个Static静 ...
- C#学习笔记(八):扩展方法
还记得第一次使用DOTween时,发现缓动方法竟然是可以直接用Transform对象中调用到,当时就被震撼到了(那是还是C#小白一只).好了不多说了,今天来学习一下C#的这个特性——扩展方法. 扩展方 ...
- LINQ学习系列-----1.3 扩展方法
这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性. 一.扩展方法介绍 废话不多说,先上源码截图: 上图中Ge ...
- C#编程(六十一)------------LINQ中的扩展方法
原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...
- Linq之扩展方法
目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何 ...
- .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)
1.自动属性 Auto-Implemented Properties 2.隐式类型 var var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...
- 从扩展方法到匿名方法再到LINQ
1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
随机推荐
- HTTP Status 500 - DateConverter does not support default String to 'Date' conversion.错误
//自己指定一个类型转换器(将String转成Date) DateConverter converter = new DateConverter(); converter.setPattern(new ...
- django-带参数路由
路由urls.py from django.conf.urls import url from goods.views import IndexView, DetailView, ListView u ...
- django-登录和退出及redis存储session信息
登录 1.视图函数views.py # 登录 from django.contrib.auth import authenticate, login # authenticate:user认证 log ...
- Git的个人总结
Git Git简史: 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代. Linux 内核开源项目有着为数众多的参与者. 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存 ...
- LeetCode 1000. Minimum Cost to Merge Stones
原题链接在这里:https://leetcode.com/problems/minimum-cost-to-merge-stones/ 题目: There are N piles of stones ...
- gitbase 集成sqler 进行git 代码分析
gitbase 是一个方便的git sql 查询引擎,sqler 是一个很不错的sql 转rest api工具,以下是一个简单的集成测试 项目使用docker-compose 运行 环境准备 do ...
- CF468C 【Hack it!】
构造题果然都非常神仙啊 首先翻译有点问题,\(L, R\)的范围应该为\([1, 10^{200}]\) 由于模数a达到了\(10^{18}\),所以我们可以发现,当\(i<10^{18}\)时 ...
- nodejs+nvm历史版本
官网:http://nodejs.org/dist/ 淘宝镜像:https://npm.taobao.org/mirrors/node/ nvm历史版本:https://github.com/core ...
- Python题库系列分享一(17道)
1.1 到Python官方网站下载并安装Python解释器环境.1.2 到Anaconda官方网站下载并安装最新的Anaconda3开发环境.1.3 Python程序的__name__的作用是什 ...
- 算法:贪心、回溯(su)、分治、动态规划,思想简要
贪心算法: 只做出当前看来最好的选择,而不从整体考虑最优,他所作出的是局部最优解.使用该算法的前提是必须具备无后效性,即某个状态以前的选择不会影响以后的状态的选择,只与当前状态有关. 回溯算法: 本质 ...