如何在此方案中使用lambda或linq避免使用嵌套的foreach语句?它已经很晚了,我似乎无法弄清楚如何访问ErrorMessage属性而不必恢复到嵌套的foreach语句。如果使用完全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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
不是errors.Add(modelErrorCollection.SelectMany(x => x))
吗?