int intCount = 0;
如上图所示,我今天有一段代码,我先查出一个信息集合List<A> A,然后再根据查出的集合A进一步去查信息List<B> B,然后查出最终结果 List<C> C,有一点特别的是我新组成的对象拥有 A和B的某些共同属性,所以我再写select的时候 LoginName=pagedApply.LoginName,但是执行结果新生成的最终对象的所有LoginName都是第一A的Item的值。百思不得其解,然后索性如图写代码,发现得到的数据仍然全部是Messi0
求解啊,这是为什么,是微软的Bug,还是我学艺不精,求大神指路
肯定是微软的Bug。
从哪里肯定?
会有这样的问题,回头看看。
除非,这个lamda也是延迟处理,否则不会有这样的情况。
@Supper_litt: 已经 tolist了 ,所有拿到都是 list对象了,没有延迟处理呀
把每步都加上ToList()
没有用的,已经试过了
原 foreach (var pagedApply in pagedApplies.Items)
修改为
foreach (var pagedApply in pagedApplies.Items.ToList())
还试过 ForEach()
你们在工作中有遇到此类情况吗?
@Lionel Andrés Messi: 没有,确保每步都ToList(),另外跟踪下数据嘛。
只有2条记录,你确定5次中每一次pagedApply都可以取到数据么?
嗯,我确定,那个显示的记录和代码截图的时候有时间差,那个显示记录图只是 来证明所有的LoginName都是 messi0 的
@Lionel Andrés Messi: 你暂时把LoginName=temp12 改成 LoginName=intCount 看看结果是怎样
@米修君:
As you wish,
但值还是有问题
@Lionel Andrés Messi: 是resultQueryable里的值就已经不对了,还是addrange后applyview才不对的?
检查一下ApplyView的code呢?
@米修君: ..............我对此表示有点....
好吧,我偷偷告诉你吧
首先是resultQueryable里面的值不对
接着,addrange后applyview也不对了
为什么呢,因为applyview里面的值是用addrange方法将resultQueryable加进去的
..............
@Lionel Andrés Messi:
不用偷偷,不是在找微软的bug么~ 如果真是addrange错了, 那不就找到微软的bug了么~
再继续找:
1.在foreach里定义一个 int tmp = intcount+1,然后loginname=tmp
2.检查ApplyView的code
是不是下面要执行的代码对applyViews进行了修改?
这是这个方法的最后两句
pagedApplies.Items = applyViews;
return pagedApplies;
其他没有了
现在就是 applyViews这个有问题
看你的过滤条件。。。