c# - 根据另一个列表中的值拆分自定义列表

标签 c# linq

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

class Details
{
    string Fund
    string DT
}

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

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

 detailList
 Fund       DT
 LMON       E
 LMPN       K
 PLLM       E

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

 hldList
 Fund
 LMON
 LMON
 LMON
 LMPN
 LMPN
 PLLM
 PLLM

所以我希望在 detailListDT 属性上拆分它,所以答案应该是,

 E List          K List
 LMON            LMPN
 LMON            LMPN
 LMON
 PLLM
 PLLM

我认为实现此目标的最佳方法是使用 LINQ?但是我不确定该怎么做?

最佳答案

您可以使用 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)));

如果你想要一个List<Holding>对于每个 dt 组:

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();

关于c# - 根据另一个列表中的值拆分自定义列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221286/

相关文章:

c# - XML 数据过滤和搜索

c# - 单元测试我认为如何指出正在测试的类上的逻辑错误

c# - 如何使用动态列旋转普通 SQL 查询

c# - 无法使用将覆盖 C# 中的默认值的新类构造函数值

c# - 尽管通过代码运行测试,ReSharper dotcover 仍显示 0% 的覆盖率

c# - 在 C# 中使用 LINQ 过滤可变数量的参数

c# - LINQ 程序集位于 Windows XP 中的什么位置?

c# - 使用 linq 解析 youtube 提要

c# - 即使选择单个测试,Nunit 也会在 TestFixture 上运行所有测试

c# - 在两个图像之间循环以模拟 C# WPF 中的动画