Linq - 如何将此代码转换为linq

时间:2011-04-12 16:49:18

标签: linq

我的Linq-fu不足以将以下内容翻译成一两行。

 var errors = new List<string>();
 foreach (var key in ModelState.Keys)
 {
   errors.Add(ModelState[key].Errors.FirstOrDefault().ErrorMessage);
 }

 return Json(new { success = false, errors = errors });

3 个答案:

答案 0 :(得分:3)

关闭转换(因为FirstOrDefault()可能返回null而不安全,因为你的代码会引发空引用异常):

return Json(new { success = false,
                  errors = ModelState.Values
                      .Select(ms => ms.Errors.FirstOrDefault().ErrorMessage)
                      .ToList() });

您可以使用以下方式使其更安全:

return Json(new { 
    success = false,
    errors =
        ModelState.Values
                  .Select(ms => 
                          { 
                              var error = ms.Errors.FirstOrDefault();
                              return error == null ? error.ErrorMessage : "";
                          })
                  .ToList() });

答案 1 :(得分:3)

确切的翻译将是:

var errors = ModelState.Keys.Select(k => ModelState[k].Errors.First().ErrorMessage);
return Json(new { success = false, errors = errors.ToList() });

如果ModelState是Dictionary<TKey,TValue>或类似的,您可以直接使用这些值:

var errors = ModelState.Values.Select(v => v.Errors.First().ErrorMessage);
return Json(new { success = false, errors = errors.ToList() });

答案 2 :(得分:2)

return new Json(new 
   {
      success = false,
      errors = ModelState.Keys.Select(k => ModelState[key].Errors.First().ErrorMessage).ToList()
   });