博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq调试实时输出信息扩展方法(摘抄)
阅读量:4455 次
发布时间:2019-06-07

本文共 1508 字,大约阅读时间需要 5 分钟。

原文在此

原linq语句:

var res = employees.Where(e => e.Gender == "Male").Take(3).Where(e => e.Salary > avgSalary).OrderBy(e => e.Age);

 

扩展方法:

public static IEnumerable
LogLINQ
(this IEnumerable
enumerable, string logName, Func
printMethod) {#if DEBUG int count = 0; 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(3)    .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。这将仅显示与日志名称前缀匹配的行。

 

转载于:https://www.cnblogs.com/missile/p/11095341.html

你可能感兴趣的文章
Geometry Imager Viewport Filter
查看>>
Guava API学习之Optional 判断对象是否为null
查看>>
九度oj 题目1025:最大报销额
查看>>
数字及字符串
查看>>
【转载】OmniGraffle (二)基础绘图和模具
查看>>
一些提高开发效率的 Category
查看>>
拓扑排序基础题——排序
查看>>
搭建keepalived+mysql主从复制高可用
查看>>
假如你在每一个变化中看见崭新的自己
查看>>
转:iphone 申请证书
查看>>
Python就业方向
查看>>
一步步学习SPD2010--第二章节--处理SP网站(3)--创建网站层次架构
查看>>
TCP
查看>>
Excel常用函数大全
查看>>
团队-团队编程项目中国象棋-模块测试过程
查看>>
R-创建数据集-ch2
查看>>
10个经典的C语言面试基础算法及代码
查看>>
[概念] js的函数节流和throttle和debounce详解
查看>>
普通的java Ftp客户端的文件上传
查看>>
视图系统
查看>>