首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用LINQ表示这个嵌套循环?

如何用LINQ表示这个嵌套循环?
EN

Stack Overflow用户
提问于 2022-10-24 16:51:56
回答 1查看 51关注 0票数 0

背景:

  • 我有ASP.NET核心应用程序。我试图在日志中写入服务器端验证错误。
  • 如果ASP.NET核心模型验证在webform中的任何字段中检测到任何错误,则ModelState.IsValid为false。
  • webform中的每个字段都在ModelState.Values中列出
  • 如果“值”有一个或多个错误,则Value.Errors.Count >0
  • 我想记录a) webform字段名(值的“键”)和b)该字段的每个错误消息。
  • 我想将所有这些信息包含在一行(即单个C# "string")中。

当前代码:

代码语言:javascript
复制
// LOG:
//   2022-10-24 09:37:29.0909|Error|ServiceMenu.Q255: The value '' is invalid. 
//   2022-10-24 09:37:35.4096|Error|ServiceMenu.Q265: The value '' is invalid. 
if (!ModelState.IsValid)
{
    foreach (var k in ModelState.Keys)
    {
        var v = ModelState[k];
        if (v.Errors.Count > 0)
        {
            string s = k + ": ";
            for (int i=0; i < v.Errors.Count - 1; i++)
                s += v.Errors[i].ErrorMessage + ", ";
            s += v.Errors[v.Errors.Count - 1].ErrorMessage;
            _logger.LogError(s);
        }
    }
    return Page();
}

示例输出(两个必需字段,Q255和265为空):

代码语言:javascript
复制
2022-10-24 09:37:29.0909|Error|ServiceMenu.Q255: The value '' is invalid. 
2022-10-24 09:37:35.4096|Error|ServiceMenu.Q265: The value '' is invalid. 

问:我能用LINQ简化这个嵌套循环吗?

更新:

  • 谢谢各位。
  • Evk和T.S都是绝对正确的:“不要认为使用LINQ总是好的。”我不知道--他们的观点很有道理:)
  • 奥利弗·威奇霍尔德给了我我想要的语法:)
  • 下面是我最后得到的代码: //示例日志: // 2022-10-24 13:24:10.5242|Error|ServiceMenu.Q255:值'‘无效。// 2022-10-24 13:24:24.9692|Error|ServiceMenu.Q265:值'‘无效。if (!ModelState.IsValid) { foreach (var k in ModelState.Keys) { var v= ModelStatek;if (v.Errors.Count > 0) { string s= string.Join(",",ModelStatek.Errors .Select(x => x.ErrorMessage));_logger.LogError(k + ":“+ s);}}.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-24 17:00:01

代码语言:javascript
复制
if (!ModelState.IsValid)
{
    var logMessage = string.Join("\n", ModelState.Keys
        .Where(x => ModelState[x].Errors?.Count > 0)
        .Select(x => $"{x}: " + string.Join(", ", ModelState[x].Errors.Select(y => y.ErrorMessage))));
        
    _logger.LogError(logMessage);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74184380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档