LINQ - Combine multiple lists to form a new list and align them by key?

扶醉桌前 提交于 2019-12-11 04:08:02

问题


I have two list of different columns, but each list have a common column with the same key, how do I combine them into a new list, i.e:

public class TradeBalanceBreak
{
    public int CommID { get; set; }
    public int CPFirmID { get; set; }
    public double CreditDfferenceNotional { get; set; }
    public string Currency { get; set; }
}

public class Commission
{
    public int CommID { get; set; }
    public PeriodStart { get; set; }
    public ResearchCredit { get; set; }
}

public class CommissionList
{
    public List<Commission> Commissions { get { return GetCommissions(); }}

    private List<Commission> GetCommissions()
    {
        // retrieve data code ... ...
    }
}

public class TradeBalanceBreakModel
{
    public List<TradeBalanceBreak> TradeBalanceBreaks { get; set; }
}

public class CommissionModel
{
    public List<CommissionList> CommissionLists { get; set; }
}

What I would like to achieve is to combine/flatten the TradeBalancesBreaks and CommissionLists (from the model classes) into one. The CommID is shared between the two.

Thanks.


回答1:


Using Join (extension method version) -- after your update

 var list1 = GetTradeBalanceBreaks();
 var list2 = new CommisionsList().Commissions;

 var combined = list1.Join( list2,  l1 => l1.ID, l2 => l2.First().ID,
                            (l1,l2) = > new
                                        {
                                           l1.CommID, 
                                           l1.CPFirmID,
                                           l1.CreditDifferenceNotional,
                                           l1.Currency,
                                           PeriodStarts= l2.SelectMany( l => l.PeriodStart ),
                                           ResearchCredits = l2.SelectMany( l => l.ResearchCredit ) 
                                       })
                     .ToList();



回答2:


var combined = from p in PhoneNumbers
               join a in Addresses on a.ID equals p.ID
               select new {
                   ID = p.ID,
                   Name = p.Name,
                   Phone = p.Phone,
                   Address = a.Address,
                   Fax = a.Fax
               };


来源:https://stackoverflow.com/questions/5436841/linq-combine-multiple-lists-to-form-a-new-list-and-align-them-by-key

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!