是否可以简化此LINQ语句

时间:2018-02-17 12:27:27

标签: c# linq

我有ModelState FluentValidaiton。如果视图模型无效,我想简单地返回验证错误列表,仅此而已。我已经制作了这个LINQ语句并且它工作正常,但是我想知道它是否可以用更短(更好)的方式编写。

我知道我可以提取扩展方法而且我会,问题更多是关于优化LINQ语句本身。

有问题的LINQ:

return ModelState.Select(x => x.Value).Select(x => x.Errors).SelectMany(x => x.Select(z => z.ErrorMessage));

return ModelState输出:

{  
   "Login":{  
      "childNodes":null,
      "children":null,
      "key":"Login",
      "subKey":{  
         "buffer":"Login",
         "offset":0,
         "length":5,
         "value":"Login",
         "hasValue":true
      },
      "isContainerNode":false,
      "rawValue":null,
      "attemptedValue":null,
      "errors":[  
         {  
            "exception":null,
            "errorMessage":"'Login' should not be empty."
         }
      ],
      "validationState":1
   },
   "Password":{  
      "childNodes":null,
      "children":null,
      "key":"Password",
      "subKey":{  
         "buffer":"Password",
         "offset":0,
         "length":8,
         "value":"Password",
         "hasValue":true
      },
      "isContainerNode":false,
      "rawValue":null,
      "attemptedValue":null,
      "errors":[  
         {  
            "exception":null,
            "errorMessage":"'Password' should not be empty."
         }
      ],
      "validationState":1
   }
}

return ModelState.Select(x => x.Value).Select(x => x.Errors).SelectMany(x => x.Select(z => z.ErrorMessage));输出:

[  
   "'Login' should not be empty.",
   "'Password' should not be empty."
]

2 个答案:

答案 0 :(得分:1)

试试这个:

var errorList = ModelState.Values.SelectMany(m => m.Errors)
                                 .Select(e => e.ErrorMessage)
                                 .ToList();

答案 1 :(得分:1)

我用这个

modelState.Keys.SelectMany(
    key => modelState[key].Errors
        .Select(x => x.ErrorMessage)).ToList()

虽然,我确实创建了一个自定义 ValidationError 类,它可以获取更多数据,但这是它的要点。