根据其他列表中的值拆分自定义列表

时间:2015-08-26 08:13:54

标签: c# linq

我有两个自定义列表。一个列表称为detailList,另一个列表称为hldList。以下是简化版。

class Details
{
    string Fund
    string DT
}

class Holding
{
    string Fund
    string Name
    double Price
    double Amount
}

我想要做的是拆分hldListhldList中的所有基金都存在于detailList中。我想根据hldList中的DT值拆分detailList,下面是一个简单示例,

 detailList
 Fund       DT
 LMON       E
 LMPN       K
 PLLM       E

对于此示例,我只会填充Fund中的hldList属性,但会填充其他属性。

 hldList
 Fund
 LMON
 LMON
 LMON
 LMPN
 LMPN
 PLLM
 PLLM

所以我希望将其拆分为DT的{​​{1}}属性,以便答案应该是,

detailList

我认为实现这一点的最佳方法是使用LINQ?但是我不确定如何做到这一点?

2 个答案:

答案 0 :(得分:4)

您可以使用GroupBy按此属性进行分组。您只需要将这两个列表与Join

相关联
var dtGroups = from h in hldList
               join d in detailList 
               on h.Fund equals d.Fund
               group h by d.DT into dtGroup 
               select dtGroup;

foreach (var grp in dtGroups)
    Console.WriteLine("Key:{0} Funds:{1}"
        , grp.Key, string.Join(",", grp.Select(h => h.Fund)));

如果您希望每个dt-group都有List<Holding>

IEnumerable<List<Holding>> dtHoldingLists = 
               from h in hldList
               join d in detailList 
               on h.Fund equals d.Fund
               group h by d.DT into dtGroup 
               select dtGroup.ToList();

答案 1 :(得分:1)

首先将这两个列表加入

var result = (from b in hldList
              join a in detailList on b.Fund equals a.Fund
              select new { a.DT, a.Fund, b.(*Other Columns)}).OrderBy(a=>a.DT).ToList();

然后进行分组

var nList = result.GroupBy(a => a.DT).ToList();

最后,您可以遍历拆分列表中的每个项目

foreach (var it in nList)
{
    //Here you can process each list one by one 
    nList.Where(i => i.Key == it.Key).ToList();
}