合并 2 collections 并更改相同 objects 的 属性
Merge 2 collections and change a property of same objects
我有 2 collection 位客户:
- 所有客户列表
- 相关客户列表
所有客户列表包含所有客户。
相关客户列表包含来自 "all customers list"
的一些客户
我想 return 一个名为 mergedCustomers 的第三个 collection,我可以在其中执行 function/logic 来创建一个新的 class "MergeCustomer",其中的 ID每个 collections 元素都是相等的,对于那些我在新 mergeCustomer 上设置的元素 属性 IsSelected = true.
我的第 3 个 collection 当然必须 return 所有客户,我只想更改 IsSelected 属性,其中所有客户与相关客户 collection 匹配。
执行此操作的 linq 函数是什么?
简单的方法:
var mergedCustomers=customers.Select(c=>new MergedCustomer{
Id=c.Id,
IsSelected=relatedCustomers.Select(rc=>rc.Id).Contains(c.Id)
});
加入方式:
var mergedCustomers=customers.Join(relatedCustomers,c=>c.Id,rc=>rc.Id,
(c,g)=> g.Select(rc=>new MergedCustomer { Id=rc.Id,IsSelected=true})
.DefaultIfEmpty(new MergedCustomer {Id=c.Id, IsSelected=false}));
另一种方式(我认为这应该可行):
var mergedCustomers=customers.Join(relatedCustomers,c=>c.Id,rc=>rc.Id,
(c,g)=> new MergedCustomer { Id=rc.Id,IsSelected=g.Any()});
我有 2 collection 位客户:
- 所有客户列表
- 相关客户列表
所有客户列表包含所有客户。 相关客户列表包含来自 "all customers list"
的一些客户我想 return 一个名为 mergedCustomers 的第三个 collection,我可以在其中执行 function/logic 来创建一个新的 class "MergeCustomer",其中的 ID每个 collections 元素都是相等的,对于那些我在新 mergeCustomer 上设置的元素 属性 IsSelected = true.
我的第 3 个 collection 当然必须 return 所有客户,我只想更改 IsSelected 属性,其中所有客户与相关客户 collection 匹配。
执行此操作的 linq 函数是什么?
简单的方法:
var mergedCustomers=customers.Select(c=>new MergedCustomer{
Id=c.Id,
IsSelected=relatedCustomers.Select(rc=>rc.Id).Contains(c.Id)
});
加入方式:
var mergedCustomers=customers.Join(relatedCustomers,c=>c.Id,rc=>rc.Id,
(c,g)=> g.Select(rc=>new MergedCustomer { Id=rc.Id,IsSelected=true})
.DefaultIfEmpty(new MergedCustomer {Id=c.Id, IsSelected=false}));
另一种方式(我认为这应该可行):
var mergedCustomers=customers.Join(relatedCustomers,c=>c.Id,rc=>rc.Id,
(c,g)=> new MergedCustomer { Id=rc.Id,IsSelected=g.Any()});