2

このシナリオで lambda または linq を使用してネストされた foreach ステートメントを使用しないようにするにはどうすればよいですか? 遅れており、入れ子になった foreach ステートメントに戻らずに ErrorMessage プロパティにアクセスする方法を理解できないようです。コードが完全に 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;
        }
4

2 に答える 2

4

あなたは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;
     }
于 2012-11-24T12:34:46.157 に答える
0

そうじゃないerrors.Add(modelErrorCollection.SelectMany(x => x))

于 2012-11-24T12:34:04.553 に答える