Linq To Object 序列不包含任何元素的问题,求救

Pei_Ning 2013-10-21 03:56:40
主要代码如下:

public static List<List<MyCoalLoadOptimizeValue>> coalLoadOptimizeList_Temp = new List<List<MyCoalLoadOptimizeValue>>();

coalLoadOptimizeList_Temp = coalLoadOptimizeList_Temp.Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].PointName).First().optimizeValue) > MMJMinValue[i]).ToList();

当运行到第二行时,报“序列不包含任何元素”,且报错时显示,c.Count=0;

还有一点是,在我自己电脑(window7)上运行ok,在另一台电脑上(window server8 R2)出现该问题

请各位朋友帮忙分析下问题原因,谢谢!
...全文
9015 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pei_Ning 2013-10-21
  • 打赏
  • 举报
回复
引用 8 楼 q107770540 的回复:
i是哪来的? for循环里? 因为你用的是非延迟查询(.ToList()可看出来),所以第一次没有找到符合条件的结果,导致=号右侧为空 然后又直接付值给了coalLoadOptimizeList_Temp 所以c.Count肯定是0了
这个挺有道理的,i是在for循环里,那要怎么解决呢,代码如下: for (int i = 0; i < MMJCount; i++) { if (_mmjRunningState[i] == '1') { coalLoadOptimizeList_Temp = coalLoadOptimizeList_Temp.Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].testPointName).First().optimizeValue) > MMJMinValue[i]).ToList(); } else { coalLoadOptimizeList_Temp = coalLoadOptimizeList_Temp.Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].testPointName).First().optimizeValue) <= MMJMinValue[i]).ToList(); } }
q107770540 2013-10-21
  • 打赏
  • 举报
回复
i是哪来的? for循环里? 因为你用的是非延迟查询(.ToList()可看出来),所以第一次没有找到符合条件的结果,导致=号右侧为空 然后又直接付值给了coalLoadOptimizeList_Temp 所以c.Count肯定是0了
Pei_Ning 2013-10-21
  • 打赏
  • 举报
回复
引用 6 楼 q107770540 的回复:
上出错行代码
引用 5 楼 q107770540 的回复:
从你的代码来看,应该是在一个for循环里? c.Count 写在哪里的
coalLoadOptimizeList_Temp = coalLoadOptimizeList_Temp.Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].PointName).First().optimizeValue) > MMJMinValue[i]).ToList(); 标红的c.Count=0,实际应该未1000多,这行代码包含两层Where,内层Where是对c的筛选
q107770540 2013-10-21
  • 打赏
  • 举报
回复
上出错行代码
q107770540 2013-10-21
  • 打赏
  • 举报
回复
从你的代码来看,应该是在一个for循环里? c.Count 写在哪里的
Pei_Ning 2013-10-21
  • 打赏
  • 举报
回复
引用 3 楼 moonwrite 的回复:
Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].PointName) 这个条件一定有才First;不然就使用FirstOrDefault() 不为null再继续~where
谢谢您的回复,但我感觉我的这个问题不是First的问题,因为实际数据是可以满足条件的,而且只是在部分机器上运行有这个问题
moonwrite 2013-10-21
  • 打赏
  • 举报
回复
Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].PointName) 这个条件一定有才First;不然就使用FirstOrDefault() 不为null再继续~where
Pei_Ning 2013-10-21
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
First()前面的那个查询一个元素也没有找到。
版主,这个我明白,关键是,c.Count=0这个问题,c.Count应该是大于零的
threenewbee 2013-10-21
  • 打赏
  • 举报
回复
First()前面的那个查询一个元素也没有找到。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧