繁体   English   中英

如何有条件地使用Linq将属性从一个列表复制到另一个列表

[英]How to copy properties from one list to another using Linq conditionally

我有两个自定义对象列表。
两者都将DivisionId作为通用属性。 每当Member.DivisionId = Divisions.DivisionId时,我想使用Linq从List<Divisions>复制两个参数PlanTypeCoverageTypeList<Members>

成员和部门对象如下:

public class Members
{
  public string FirstName;
  public string LastName;
  public string DivisionId;
}

Public Class Divisions
{
  public string PlanType;
  public string CoverageType,
  public string DivisionId;
}

谢谢

您描述的是加入

    var query = from m in members
                join d in divisions on m.DivisionId equals d.DivisionId
                select new { m.FirstName,
                            m.LastName,
                            m.DivisionId,
                            d.CoverageType,
                            d.PlanType
                        };

如果要将项目从第一个列表的索引0复制到第二个列表的索引0,以此类推,对于所有其他索引,可以执行以下操作:

var pairs = members.Zip(divisions, (a, b) => new
{
    Member = a,
    Division = b,
});

foreach (var pair in pairs)
{
    Copy(pair.Member, pair.Division);
}

如果索引不匹配,则需要进行联接:

var pairs = members.Join(divisions
    , member => member.DivisionId
    , division => division.DivisionId
    , (a, b) => new
    {
        Member = a,
        Division = b,
    });

foreach (var pair in pairs)
{
    Copy(pair.Member, pair.Division);
}

请注意,如果物品已经按照正确的顺序放置,则Zip会更快。 Join将比Zip慢,但比手动重新排序项目以允许Zip快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM