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
- C#linq和lamda两种写法返回的集合中的对象元素引用情况不同,循环计算值要小心
- Java 查找两个有复杂对象的集合中的不同元素和相同的元素
- Linq与lamda写法对比
- c++ 重载为返回值对象以及引用的情况
- 转帖:Linq和Lamda的对比总结
- 函数返回值和返回引用是不同的
- Lamda表达式和Linq
- 关于gcd的函数和过程两种不同写法
- 使用Linq求和方法Sum计算集合中多个元素和时应该注意的性能问题
- 遍历数组的两种写法,for循环和forin
- 两种不同写法取最小数组元素
- 对象的两种写法
- iOS | 小心NSTimer中的循环引用
- laszlo方法的两种不同写法
- list循环改变元素的值写法
- javascript for循环的两种写法
- java找出2个集合相同和不同的元素(以及去除List中的重复元素)
- java找出2个集合相同和不同的元素(以及去除List中的重复元素)
- 继续前行
- 智能电网技术:奥克尼群岛电力解决方案
- Java Utils工具类大全
- C#基础(13)——面向对象命名空间\值类型引用类型\字符串
- Oracle的Redo的作用及原理
- C#linq和lamda两种写法返回的集合中的对象元素引用情况不同,循环计算值要小心
- GCC对C语言的一些扩展小结
- 面试题总结
- 性能分析工具JMH(二)
- 竞争编码一些数字的计算问题
- Eclipse学习系列 -- TCP/IP Monitor(转载)
- codeforces 120C Winnie-the-Pooh and honey
- 1000以内素数的判断
- HIVE备份--批量导出HIVE建表语句