C#linq和lamda两种写法返回的集合中的对象元素引用情况不同,循环计算值要小心

来源:互联网 发布:中国大豆进口数据 编辑:程序博客网 时间:2024/05/29 05:56

不知道你们在用linq和lamda返回集合的时候有没有遇到这种情况:返回的集合中的元像素有引用类型的,如果做循环修改对象的数字类型的属性值,出现了重复计算,我今天遇到了这个情况,代码如下:

            

//linq写法获取集合,代码中的db 是EF的上下文对象              var list = (from o1 in db.obj1                            join o2 in db.obj2 on o1.id equals o2.id                            select new                            {                                o2,//这里中相同的对象引用                                o1.id                            }                      ).ToList();

假设list长度等于2 ,且o2是同一个对象,  o2中有一个属性是age;我们的需求是:循环list集合把年龄都加1。那么直接循环list就会出错,age属性被计算了两次。

这个问题不太好表述 ,很可能你看不明白是什么意思,等你遇到此类问题的时候能想起很可能是引用了同一对象就行了。


但是下面lamda写法的情况不会生成同一个对象的引用,请大家注意啊:

  var list = db.obj1.Include(o => o.obj2).ToList();
这种写法返回的集合中obj2却不是同一个对象 !!!!

阅读全文
0 0