当前位置: 首页 > news >正文

我国网站建设现状网站开发 就业简历模板

我国网站建设现状,网站开发 就业简历模板,万网官网域名查询,一个服务器放多少网站LINQ是我在C#中最喜欢的功能之一。它让代码看起来更漂亮美观。我们得到了一个易于编写和理解的简洁函数式语法。好吧#xff0c;至少我们可以使用LINQ方法的语法风格。LINQ很难进行调试。我们无法知道该查询内部发生了什么。我们可以看到输入和输出#xff0c;但这就是它的全… LINQ是我在C#中最喜欢的功能之一。它让代码看起来更漂亮美观。我们得到了一个易于编写和理解的简洁函数式语法。好吧至少我们可以使用LINQ方法的语法风格。LINQ很难进行调试。我们无法知道该查询内部发生了什么。我们可以看到输入和输出但这就是它的全部。出现问题时会发生什么我们只是盯着代码试图获得某种洞察力必须有一个更好的方式……调试LINQ虽然很难但可以使用一些技术来调试LINQ。首先我们创建一个小场景。假设我们想要一份按年龄排序的3名男性员工的名单这些员工的薪水高于平均水平。这是一个非常常见的查询类型对吧这是我为此编写的代码public IEnumerableEmployee MyQuery(ListEmployee employees) { var avgSalary employees.Select(ee.Salary).Average(); return employees .Where(e e.Gender Male) .Take(3) .Where(e e.Salary avgSalary) .OrderBy(e e.Age); }数据集为姓名年龄性别收入Peter Claus40“Male”61000Jose Mond35male62000Helen Gant38Female38000Jo Parker42Male52000Alex Mueller22Male39000Abbi Black53female56000Mike Mockson51Male82000当运行此查询时我得到的结果为 PeterClaus,61000,40这似乎不对…… 应改有3名员工的。而平均工资约为56400因此结果中应包括薪水为62000的“Jose Mond”和薪水为82000的“Mike Mockson”。所以我的LINQ查询中有一个错我该怎么办呢好吧我可以盯着代码直到我弄明白这甚至可能适用于这种特殊情况。或者我可以以某种方式调试它。让我们看看如何调试它。1. 在快速监视中评估查询的各个部分你可以做的最简单的事情之一就是在快速监视中分析各个查询。你可以从第一个操作开始然后继续第一个和第二个操作以此类推。这里有一个例子你可以使用OzCode的显示功能来显示你感兴趣的字段这样可以轻松找到问题。我们可以看到即使在第一次查询之后就出现了问题。“Jose Mond” 一个男性貌似没有查询到。现在我可以盯着一小段代码找出错误。我想我明白了Jose的性别写成了“male”而不是“Male”。 我现在可以对查询做一个小的修复var res employees .Where(e e.Gender.ToLower() male) // added ToLower() .Take(3) .Where(e e.Salary avgSalary) .OrderBy(e e.Age);修复后执行代码得到结果为Jose Mond, 62000, 35Peter Claus, 61000, 40现在包括了Jose所以修复了第一个错误。还有另一个错误“Mike Mockson”仍然缺失我们将用下一个技术解决。 这种技术有其缺点。如果你需要在大集合中查找特定项目则可能需要在快速监视窗口中话费大量时间。另请注意某些查询可以更改应用程序状态。例如你可以在lambda函数中调用一个可以改变瞬时值的方法像 varressource.Select(xx.Age) 。通过在快速监视窗口运行将改变应用程序状态并危及调试会话。通过在表达式中添加 ,nse 无副作用后缀no-side-effects postfix 避免这种情况。要使用它首先将表达式复制到剪贴板打开一个空的快速监视窗口然后使用 ,nse后缀手动粘贴表达式。2. 将断点放入lambda表达式中另一个调试LINQ的好方法是在lambda表达式中放置一个断点。这允许评估单个项目。对应大型集合你可以将其与条件断点功能结合使用。 在我们的例子中我们发现“Mike Mockson”不是第一个Where操作结果的一部分。你可以在 .Where(ee.GenderMale)lambda表达式中放置条件断点条件为 e.NameMike Mockson。运行查询后我们将看到只打印了3个名字那是因为我们的查询条件中有 .Take(3)在前3次匹配后停止评估。我们确实想要一份按年龄排序的3名男性员工的名单这些员工薪水高于平均水平。所以我们可能应该在检查薪水后才使用 Take运算符。将查询改为一下内容var res employees .Where(e e.Gender.ToLower() male) .Where(e e.Salary avgSalary) .Take(3) .OrderBy(e e.Age);正确的结果是Jose MondPeter Claus 和 Mike Mockson。在LINQ to SQL中这种技术不起作用。3. 使用日志中间件方法让我们回到错误尚未修复的初始状态面对看似正确的查询我们都傻眼了。调试查询的另一个方法是使用以下扩展方法public static IEnumerableT LogLINQT(this IEnumerableT enumerable, string logName, FuncT, string 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, ee.Name) .Where(e e.Gender Male) .LogLINQ(logWhere, ee.Name) .Take(3) .LogLINQ(logTake, ee.Name) .Where(e e.Salary avgSalary) .LogLINQ(logWhere2, ee.Name) .OrderBy(e e.Age);输出为说明和解释在LINQ查询中的每个操作之后放置 LogLINQ方法。它可以选择打印通过此操作的所有项目和总数。logName是每个输出的前缀可以轻松查看编写它的查询步骤。我喜欢将其命名为之后操作相同的名称。FunT,stringprintMethod允许打印给定项目的任何内容。在上面的示例中我选择使用 ee.Name打印员工的姓名当为 null时除总数外不会打印任何内容。为了优化此方法尽在调试模式下有效 #if DEBUG。在发布模式下它什么都不做。每个项目都按顺序打印无需等待操作结束这是因为LINQ的 lazy 特性。以下是查看单个操作结果的提示将整个输出复制到 notepad。然后使用CtrlShiftF(Find)并查找日志前缀例如 logWhere2。在查找对话框点击Find All in Current Document。这将仅显示与日志名称前缀匹配的行。查看输出窗口可以看到以下几点源中包括“Jose Mond”但 logWhere没有这是因为我们之前看到的区分大小写的错误。由于提前使用 Take方法“Mike Mockson”从未在源中进行评估。事实上源的计数日志完全丢失因为它永远不会到达集合的末尾。对应 LINQ to SQL以及可能的其他LINQ程序此技术存在问题。它将 IQueryable转换为 IEnumerable更改查询并可能强制进行早期评估。最好不要将它用于任何LINQ程序如Entity Framework。4. 使用OzCode的LINQ功能如果你需要有效工具调试LINQ可以使用OzCode Visual Studio扩展。免责声明我目前是OzCode员工。然而这是我个人博客这篇文章只是我的专业推荐。OzCode将可视化你的LINQ查询以准确显示每个项目的行为方式。首先它将显示每次操作后的项目数然后你可以点击任何编号按钮以查看项目以及它们在操作中的进度。我们可以看到“Jo Parker”在源中排名第4在第一次 Where操作之后排名第3。它没有通过第二次的 Where操作。它甚至没有在最后两次操作 OrderBy 和 Take中处理。如果这还不够你可以按右上角的“lambda”按钮查看完整的LINQ分析。以下是它的样子因此在调试LINQ方面你几乎可以充满希望和梦想。总结调试LINQ不是很直观但可以通过一些技术很好的完成。我没有提到LINQ查询语法因为他没有被使用太多。只有技术#2 lambda断点和技术#4 (OzCode)爱使用了查询语法。我希望你能使用本文的一些技巧请继续关注以后的帖子。
http://www.zqtcl.cn/news/291692/

相关文章:

  • 培训机构活动策划网站wordpress 改端口
  • 北京网站制作与营销培训用asp做网站视频
  • 江苏丹阳建设公司网站做网站中的剪辑图片
  • 纯静态网站怎样广州工程造价信息网
  • 为什么网页不能打开建设银行网站企业网站开发综合实训
  • 企业网站制作 深圳网站建站行业公司主页建设
  • 外汇直播网站建设开发做网站空间商需要办什么手续
  • 源码哥网站的模板皮肤病在线咨询医生免费咨询
  • 温岭市市住房和城乡建设规划局网站附近的电脑培训班在哪里
  • 网站备案百度站长提交减肥网站源码
  • 网站添加文章机械代加工厂家
  • 学做各种糕点的网站cn网站建设多少钱
  • 首页网站关键词优化教程如何查询网站点击率
  • 文章类型的网站模版北京朝阳区房价2023年最新房价
  • wap网站发布注销主体和注销网站
  • 微信小程序 做网站满足客户的分销管理系统
  • 高佣联盟做成网站怎么做wordpress 更新版本
  • 杭州营销网站建设公司成都网站排名优化报价
  • 网站建设设计哪家好太原新建火车站
  • 医疗网站建设信息cps推广平台有哪些
  • rp怎么做网站备案 添加网站
  • 汕尾手机网站设计淘宝客做网站怎么做
  • 营口公司网站建设网站百度seo关键词优化
  • 网站开发命名规范汉中网站制作
  • 嘉定网站建设公司泗水做网站ys178
  • 邯郸网站设计招聘网齐家网和土巴兔装修哪家好
  • 京东网站推广方式jquery网页设计成品
  • 做本地网站卖四川省建设科技协会网站首页
  • 注册网站引流wordpress5.0.2图集怎么发布
  • 360产品展示网站哈尔滨个人建站模板