首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ :异常,因为“序列不包含任何元素”

LINQ :异常,因为“序列不包含任何元素”
EN

Stack Overflow用户
提问于 2011-11-27 12:43:19
回答 5查看 57K关注 0票数 20

在执行以下linq时,我得到了这个异常:

“序列不包含元素”

Linq代码:

代码语言:javascript
运行
复制
   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();

有人能帮我吗?

EN

回答 5

Stack Overflow用户

发布于 2011-11-27 13:02:54

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

票数 51
EN

Stack Overflow用户

发布于 2011-11-27 13:15:00

从分手开始。当前代码没有为调试器提供抓地力。

代码语言:javascript
运行
复制
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;
票数 7
EN

Stack Overflow用户

发布于 2011-11-27 13:11:19

当在同一代码行中有这么多串在一起时,很难说哪个序列没有元素。尝试将代码分解为多行,然后调试它。这也将使它更具可读性。

代码语言:javascript
运行
复制
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循环(只是为了调试&可以访问VS的直接窗口中的数据)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8285627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档