LINQ-组合多个列表以形成新列表,并按键对齐它们?

LINQ-组合多个列表以形成新列表,并按键对齐它们?,linq,list,linq-to-objects,Linq,List,Linq To Objects,我有两个不同列的列表,但每个列表都有一个具有相同键的公共列,如何将它们组合到一个新列表中,即: 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 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; }
}
公共类TradeBalanceBreak
{
public int CommID{get;set;}
public int CPFirmID{get;set;}
公共双CreditdReferenceNational{get;set;}
公共字符串货币{get;set;}
}
公开课委员会
{
public int CommID{get;set;}
公共周期开始{get;set;}
公共研究信用{get;set;}
}
公共类委员会名单
{
公共列表佣金{get{return GetCommissions();}}
私人名单
{
//检索数据代码。。。
}
}
公共类贸易平衡模型
{
公共列表TradeBalanceBreaks{get;set;}
}
公共类委托模型
{
公共列表委托列表{get;set;}
}
我想要实现的是将
TradeBalancesBreaks
commissionlist
(来自模型类)合并/展平为一个。
CommID
在两者之间共享

谢谢。

使用Join(扩展方法版本)--更新后

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
               };
 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
实际上是一个列表列表,有点复杂。请你看一下好吗?谢谢你。@Saxman-你可以靠近,但不是你想要的。问题是,每个地址/传真对的数量不确定,但所选内容必须具有相同的参数集。如果你愿意容忍一个地址列表和一个传真号码列表作为财产,它会起作用。查看我的更新。我在尝试更新的代码时遇到此错误,基本上是在显示
地址=l2的位置。选择many…
。首先,我需要深入一点,我不能只做
l2.SelectMany(…)
,我需要做类似
l2.Addresses.SelectMany(…)
,然后返回错误:
方法'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func)的类型参数无法从用法中推断。请尝试显式指定类型参数。
谢谢您的关注。@Saxman--现在可以回家了,但是如果您可以使用列表的确切类型进行更新,这会有所帮助。在这里给我留下评论,我会根据你的新信息看看我能做些什么。@tvanfosson-我已经用我正在使用的模型/类更新了我的原始问题。你能看一下吗?非常感谢。我刚刚更新了我的原始问题,因为
列表2
实际上是一个列表列表,有点复杂。请你看一下好吗?非常感谢。