当前位置:编程学习 > C#/ASP.NET >>

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

主要代码如下:

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)出现该问题

请各位朋友帮忙分析下问题原因,谢谢! linq C# --------------------编程问答-------------------- First()前面的那个查询一个元素也没有找到。 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
First()前面的那个查询一个元素也没有找到。


版主,这个我明白,关键是,c.Count=0这个问题,c.Count应该是大于零的 --------------------编程问答-------------------- Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].PointName)
这个条件一定有才First;不然就使用FirstOrDefault()
不为null再继续~where --------------------编程问答--------------------
引用 3 楼 moonwrite 的回复:
Where(c => Convert.ToDecimal(c.Where(d => d.pointNum == pointList[pointcount - MMJCount + i].PointName)
这个条件一定有才First;不然就使用FirstOrDefault()
不为null再继续~where


谢谢您的回复,但我感觉我的这个问题不是First的问题,因为实际数据是可以满足条件的,而且只是在部分机器上运行有这个问题 --------------------编程问答-------------------- 从你的代码来看,应该是在一个for循环里?

c.Count 写在哪里的 --------------------编程问答-------------------- 上出错行代码 --------------------编程问答--------------------
引用 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的筛选 --------------------编程问答-------------------- i是哪来的? for循环里?
因为你用的是非延迟查询(.ToList()可看出来),所以第一次没有找到符合条件的结果,导致=号右侧为空

然后又直接付值给了coalLoadOptimizeList_Temp 

所以c.Count肯定是0了 --------------------编程问答--------------------
引用 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();
                    }
                }
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,