[c#]更改到 Linq 嵌套的循环

发布时间: 2017/2/28 23:00:01
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我要去赶 DbEntityValidationException,和我想要填充字典中,所有的错误。目前我做下列操作︰

foreach (var entity in errors)
{
    foreach (var error in entity.ValidationErrors)
    {
        validationErrors.Add(entity.Entry.Entity.GetType().FullName + "." + error.PropertyName, 
                             error.ErrorMessage)
    }
}

它是可能改变上述循环到 linq 语句吗?

解决方法 1:

我不会改变它,因为内在的方法有副作用,不应该走进 linq 语句。所以唯一的事情就是这两个可以碾压每个循环。但是,你在你最内在的方法访问这两个循环变量 (实体和错误) 您将创建一个中间的匿名对象包含两个。

所以 (恕我直言) 在这种情况下,linq 吊坠会比这简单的两个 for 循环堆叠更难以阅读。

var items = errors.SelectMany(entity => entity.Select(error => new { Entity = entity, Error = error }));

foreach(var item in items)
{
    validationErrors.Add(
        item.Entity.Entry.Entity.GetType().FullName 
            + "."
            + item.Error.PropertyName,
        errorMessage);
}
赞助商