合并两个列表对象

时间:2016-01-08 08:30:15

标签: c#

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

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,我们在第二个中获取IssueMoreInfoText列并将其传递给第一个列中的第一个列表ToolTipInfoText

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

3 个答案:

答案 0 :(得分:4)

我假设您正在寻找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();
}

答案 1 :(得分:2)

尝试使用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

答案 2 :(得分:0)

使用Linq更容易:

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

它的作用是:

NSKDataList中的Foreach元素,它将更改其ToolTipInfoText,您将转到IssuesMoreInfoList,并根据请求按ID过滤它,然后返回一个或默认(如果没有被选中)并获得其IssueMoreInfoText