代码之家  ›  专栏  ›  技术社区  ›  Gustavo Piucco

使用LINQ返回值的IEnumerable

  •  0
  • Gustavo Piucco  · 技术社区  · 7 年前

    我有以下C#分机:

    public static class ModelStateHelper
        {
            public static IEnumerable Errors(this ModelStateDictionary modelState)
            {
                if (!modelState.IsValid)
                {
                    return modelState.ToDictionary(kvp => kvp.Key,
                    kvp => kvp.Value.Errors
                    .Select(e => e.ErrorMessage).ToArray())
                    .Where(m => m.Value.Any());
    
                }
    
                return null;
            }
        }
    

    从控制器调用此扩展以生成JSON,并生成以下JSON:

    {
        "error": [
            {
                "key": "Password",
                "value": [
                    "The Password field is required."
                ]
            },
            {
                "key": "Username",
                "value": [
                    "The Username field is required."
                ]
            }
        ]
    }
    

    如何修改此扩展方法以仅返回错误消息列表?这样地:

    {
        "error": [
            "The Password field is required.",
            "The Username field is required."
        ]
    }
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   LukaszBalazy    7 年前

    ModelStateExtenstions 让我们这样说吧。你还想得到什么 IEnumerable<string> 那么就这样把它还给我。

    以下是代码:

     public static class ModelStateExtenstions
    {
        public static IEnumerable<string> GetErrorMessages(this ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return modelState.ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
                              .Select(e => String.Join(" ", e.Value.Errors.Select(x => x.ErrorMessage)));
            }
    
            return Enumerable.Empty<string>();
        }
    }
    

    因为一个属性可以有多个错误消息,所以我决定用空空间连接它们。希望这对你有帮助。

        2
  •  3
  •   Mehrdad Dowlatabadi    7 年前

    var allErrors = ModelState.Values.SelectMany(v => v.Errors).Select(x=>x.ErrorMessage).ToList();
    

    分机:

    public static class ModelStateHelper
    {
        public static List<string> Errors(this ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
              return ModelState.Values.SelectMany(v => v.Errors).Select(x=>x.ErrorMessage).ToList();
            }
            return new List<string>();
        }
    }
    
        3
  •  2
  •   Milad Dastan Zand    7 年前

    也许这样的代码可以工作:

    public static class ModelStateHelper
    {
        public static IEnumerable Errors(this ModelStateDictionary modelState)
        {
            if (!modelState.IsValid)
            {
                return modelState.Errors();
            }
    
            return null;
        }
    }