合并两个列表对象

本文关键字:两个 列表 对象 合并 | 更新日期: 2023-09-27 18:29:25

我在合并两个对象列表时遇到问题它们在这里:

first one
List<NSKData> NSKDataList = new List<NSKData>();
public class NSKData
{
    public string ID { get; set; }
    public string Issue { get; set; }
    public string ToolTipInfoText { get; set; }
    public NSKData() { }
    public NSKData(string id, string issue, string tooltipinfo)
    {
        ID = id;
        Issue= issue;
        ToolTipInfoText = tooltipinfo;
    }
}
 second one
 List<IssuesMoreInfo> IssuesMoreInfoList = new List<IssuesMoreInfo>();
public class IssuesMoreInfo
{
    public string ID { get; set; }
    public string IssueMoreInfoText { get; set; }
}

如果我能一次获得所有需要的数据,我不会问这个问题,但我会为第一个获取所有数据,只有在我能获得第二个数据之后。

所以,我需要的结果是:为了从第二个列表中获得IssueMoreInfo,根据两者中的ID,就像第一个中的ID 10一样,我们在第二个中获得IssueNoreInfoText列,并将其传递给ToolTipInfoText 列中的第一个列表

希望你们的帮助,伙计们,谢谢

合并两个列表对象

我想您正在寻找Enumerable.Join:

var query = from data in NSKDataList 
            join info in IssuesMoreInfoList 
            on data.ID equals info.ID
            select new NSKData(data.ID, data.Issue, info.IssueMoreInfoText);
NSKDataList = query.ToList();

另一种不需要重新创建所有对象和列表的方法:

var infoIdLookup = IssuesMoreInfoList.ToLookup(i => i.ID);
foreach(NSKData data in NSKDataList)
{
    data.ToolTipInfoText = infoIdLookup[data.ID]
       .Select(i => i.IssueMoreInfoText)
       .FirstOrDefault();
}

尝试使用Linq Join

var query = from c in NSKDataList 
            join o in IssuesMoreInfoList on c.ID equals o.ID
            select new { c.ID, c.Issues , c.ToolTipInfoText , o.IssueMoreInfo  };

查询将包含来自两个列表的信息

http://www.dotnetperls.com/join

要使用Linq,它更容易做到:

NSKDataList.ForEach(nskData => nskData.ToolTipInfoText = IssuesMoreInfoList.Where(imf => imf.ID == nskData.ID).SingleOrDefault().IssueMoreInfoText);

它的作用是:

对于NSKDataList中的每个元素,它都会更改其ToolTipInfoText,您可以转到IssuesMoreInfoList并根据请求通过ID对其进行筛选,然后获得返回的或默认的(如果未选择),并获得其IssueMoreInfoText