简体   繁体   English

在这种情况下,如何避免通过使用lambda或linq来使用嵌套的foreach语句?

[英]How do I avoid using nested foreach statements by using lambda or linq in this scenario?

How do I avoid using nested foreach statements by using lambda or linq in this scenario? 在这种情况下,如何避免通过使用lambda或linq来使用嵌套的foreach语句? It's late and I cannot seem to figure out how to access the ErrorMessage property without having to revert to a nested foreach statement. 太晚了,我似乎无法弄清楚如何访问ErrorMessage属性而不必恢复为嵌套的foreach语句。 What would be the equivalent method if the code was rewritten using wholly Lambda or Linq? 如果完全使用Lambda或Linq重写代码,那么等效的方法是什么?

public static List<String> ExtractErrors(this ModelStateDictionary modelStateDictionary)
        {
            List<String> errors = new List<String>();

            var modelErrorCollection = (from modelState in modelStateDictionary.Values
                                        where modelState.Errors != null && modelState.Errors.Count > 0
                                        select modelState.Errors).ToList();

            foreach (var item in modelErrorCollection)
            {
                foreach (ModelError modelError in item)
                {
                    errors.Add(modelError.ErrorMessage);
                }
            }

            return errors;
        }

You'll want to use SelectMany for this 您将为此使用SelectMany

    public static List<String> ExtractErrors(this ModelStateDictionary modelStateDictionary)
    {
        var modelErrorCollection = (from modelState in modelStateDictionary.Values
                                    where modelState.Errors != null && modelState.Errors.Count > 0
                                    select modelState.Errors)
                                    .SelectMany(item=>item)
                                    .Select(modelError=>modelError.ErrorMessage)
                                    .ToList();
         return modelErrorCollection;
     }

是不是errors.Add(modelErrorCollection.SelectMany(x => x))吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM