当前位置:  开发笔记 > 编程语言 > 正文

LINQ:异常为"序列不包含任何元素"

如何解决《LINQ:异常为"序列不包含任何元素"》经验,为你挑选了2个好方法。

执行以下linq时,我得到以下异常:

"序列不包含任何元素"

Linq代码:

   newGradeRow[rowCnt + 1 + "Grade " + ExamName] = 
      objDataSet.Tables[1].Rows.Cast()
      .Where(p => Convert.ToDecimal(p["EMG_MARKS_ABOVE"]) <= extSubMarks  
         && extSubMarks <= Convert.ToDecimal(p["EMG_MARKS_BELOW"]))
      .Select(p => Convert.ToString(p["EMG_GRADE_NAME"]))
      .First();

谁可以帮我这个事?



1> danyloid..:

First如果序列为空,则在方法调用中抛出异常,如文档中所述.在这种情况下,最好使用FirstOrDefault方法 - 它将返回默认值(在特定情况下null)并且不会抛出任何异常.



2> Henk Holterm..:

首先要分解它.您当前的代码没有为调试器提供任何控制.

var r1 = objDataSet.Tables[1].Rows;
var r2 = r1.Cast();
System.Diagnostics.Debug.Print("r2: {0}", r2.Count());
var r3 = r2.Where(p => Convert.ToDecimal(p["EMG_MARKS_ABOVE"]) <= extSubMarks  
            && extSubMarks <= Convert.ToDecimal(p["EMG_MARKS_BELOW"]));
System.Diagnostics.Debug.Print("r3: {0}", r3.Count());
var r4 = r3.Select(p => Convert.ToString(p["EMG_GRADE_NAME"]));
var r5 = r4.First();

newGradeRow[rowCnt + 1 + "Grade " + ExamName] = r5;


很公平,但我建议你提到它是调用`First()`抛出并解释`First()`和`FirstOrDefault()之间的区别.
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有