我有两个自定义列表。一个列表称为detailList
,另一个列表称为hldList
。以下是简化版。
class Details
{
string Fund
string DT
}
class Holding
{
string Fund
string Name
double Price
double Amount
}
我想要做的是拆分hldList
。 hldList
中的所有基金都存在于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?但是我不确定如何做到这一点?
答案 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();
}