合并2个集合并更改相同对象的属性

时间:2015-06-08 19:03:35

标签: c# linq c#-5.0 .net-4.6

我有两个客户集合:

  1. 所有客户列表
  2. 相关客户名单
  3. 所有客户名单都包含所有客户。 相关客户列表包含“所有客户列表”中的一些客户

    我想返回一个名为mergedCustomers的第三个集合,我可以执行一个函数/逻辑来创建一个新类“MergeCustomer”,其中每个集合元素的Id相等,而我在新mergeCustomer上设置的属性IsSelected =真。

    我的第3个系列当然必须归还所有客户,我只是想要改变所有客户与相关客户收集相匹配的IsSelected属性。

    执行此操作的linq函数是什么?

1 个答案:

答案 0 :(得分:1)

简单方法:

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()});