LINQ: exception as "序列不包含任何元素
本文关键字:何元素 包含任 元素 exception as quot LINQ | 更新日期: 2023-09-27 18:15:56
当执行下面的linq时,我得到了这个异常:
" Sequence不包含任何元素"
Linq代码:
newGradeRow[rowCnt + 1 + "Grade " + ExamName] =
objDataSet.Tables[1].Rows.Cast<DataRow>()
.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();
有谁能帮我一下吗?
如果序列如文档中所述为空,则在First
方法调用中抛出异常。在这种情况下,最好使用FirstOrDefault方法-它将返回默认值(在特定情况下为null
),并且不会抛出异常。
从拆分开始。您当前的代码无法控制调试器。
var r1 = objDataSet.Tables[1].Rows;
var r2 = r1.Cast<DataRow>();
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;
在同一行代码中有这么多元素,很难说哪个序列没有元素。尝试将代码分解成多行,然后进行调试。这将使它更具可读性。
var myVariable = objDataSet.Tables[1];
var myEntity = myVariable.Rows.Cast<DataRow>().Where(
p => Convert.ToDecimal(p["EMG_MARKS_ABOVE"]) <= extSubMarks
&& extSubMarks <= Convert.ToDecimal(p["EMG_MARKS_BELOW"]))
.Select(p => Convert.ToString(p["EMG_GRADE_NAME"])).FirstOrDefault();
如果问题在Lambda表达式的某个地方,您可能希望将其分解为foreach循环(只是为了调试&
你应该注意这一点:如果Linq表达式/查询不包含任何记录,则不能使用Single()
和First()
。
在Lambda表达式中Single()
的位置使用FirstOrDefault()
objDataSet.Tables[1]
为空?
数据可能在objDataSet.Tables[0]
?
无论哪种方式,您都可以使用objDataSet.Tables.Count() > 0
objDataSet.Tables[1].Rows.Count() > 0