关于List集合给某个属性重新赋值的问题

小牛小牛技术菜牛 2020-12-08 01:45:32
假设我有一个类

public class A
{
public string Id{get;set;}
public string Name{get;set;}
public string Num{get;set;}
}


现在我有两个List集合

List<A> list1= new List<A>();
List<A> list2 = new List<A>();

我想把list2中的Num赋值给list1中的Num
由于数据量较大 我不想用循环去赋值

有没有一次性给某个属性赋值的方法

求助大佬们
...全文
4669 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
引用 6 楼 大西瓜大降价一块一斤 的回复:

            var result = from x in list1
                                join y in list2
                                on x.Id equals y.Id
                                into temp
                                from z in temp.DefaultIfEmpty()
                                select new A { Id = x.Id, Name = x.Name, Num = (z == null) ? x.Num : z.Num };
我结贴的时候分别给你和四楼给了10分 不知道为啥你没得到分呀 不好意思了
  • 打赏
  • 举报
回复
ziqi0716 2020-12-09
引用 7 楼 小牛小牛技术菜牛 的回复:
[quote=引用 6 楼 大西瓜大降价一块一斤 的回复:]

            var result = from x in list1
                                join y in list2
                                on x.Id equals y.Id
                                into temp
                                from z in temp.DefaultIfEmpty()
                                select new A { Id = x.Id, Name = x.Name, Num = (z == null) ? x.Num : z.Num };
感谢大佬!![/quote] 这个也是循环
  • 打赏
  • 举报
回复
引用 6 楼 大西瓜大降价一块一斤 的回复:

            var result = from x in list1
                                join y in list2
                                on x.Id equals y.Id
                                into temp
                                from z in temp.DefaultIfEmpty()
                                select new A { Id = x.Id, Name = x.Name, Num = (z == null) ? x.Num : z.Num };
感谢大佬!!
  • 打赏
  • 举报
回复

            var result = from x in list1
                                join y in list2
                                on x.Id equals y.Id
                                into temp
                                from z in temp.DefaultIfEmpty()
                                select new A { Id = x.Id, Name = x.Name, Num = (z == null) ? x.Num : z.Num };
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
如果你说用l2直接替换L1,我们说你直接 L1=l2 就好 如果你说L1+L2 那么直接linq的Concat方法,直接连接两个就好 从你提问的方式我们说,你实际是要更新,left join ,或者 update by key 这类 就算俺们用linq写,他内部一样要循环。 集合操作,集合操作,和差并补,那种操作不循环呢? 我们唯一可能的建议是用字典,用hash 替代List1,以减少查找的消耗。 而list2的循环不可避免
那除了for循环foreach这两种循环去赋值 可以再给我提供其他的赋值方式吗 linq可以写吗
  • 打赏
  • 举报
回复
wanghui0380 2020-12-08
如果你说用l2直接替换L1,我们说你直接 L1=l2 就好 如果你说L1+L2 那么直接linq的Concat方法,直接连接两个就好 从你提问的方式我们说,你实际是要更新,left join ,或者 update by key 这类 就算俺们用linq写,他内部一样要循环。 集合操作,集合操作,和差并补,那种操作不循环呢? 我们唯一可能的建议是用字典,用hash 替代List1,以减少查找的消耗。 而list2的循环不可避免
  • 打赏
  • 举报
回复
wanghui0380 2020-12-08
结帖,可以说没有你要的回答。程序员遵守逻辑,不遵守某个园子里整天告诉你们的“血案” 不循环,神仙都没救。我们只能说hash查找比list find快 但是绝对不能说,俺就要不循环。因为你要做更新,无论微软还是IBM都需要循环,只能说他们可以用索引,B tree 快速定位记录,而不是他们不循环
  • 打赏
  • 举报
回复
不知道Copy的方式能不能满足你的需求
  • 打赏
  • 举报
回复
不用循环去赋值是因为 1.数据量大 2.我想执行的这个操作非常频繁 所以我在考虑有没有非循环的赋值方式
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2020-12-08 01:45
社区公告

让您成为最强悍的C#开发者