使用 LINQ C# 从 List<object> 创建 Dict<enum, List<objec>>

Creating Dict<enum, List<objec>> from List<object> using LINQ C#

我有以下枚举和 class:

public enum SymbolTypeEnum
{
    [Description("Forex")]
    forex = 0,
    [Description("Metals")]
    metals = 1,
    [Description("Commodities")]
    commodities = 2,
    [Description("Indices")]
    indices = 3,
    [Description("Cryptocurrency")]
    cryptocurrency = 4,
    [Description("Other")]
    other = 5
}

public enum SymbolClassificationEnum
{
    [Description("None")]
    none = 0,
    [Description("Major")]
    major = 1,
    [Description("Minor")]
    minor = 2,
    [Description("Exotic")]
    exotic = 3
}
public class SymbolSettingsModel
{
    [PrimaryKeyAttribute, Unique]
    public string symbolName { get; set; }
    public SymbolTypeEnum symbolType { get; set; }
    public SymbolClassificationEnum symbolClassification { get; set; }
}

我有一个List<SymbolSettingsModel> symbolSettings;

我的目标是生成 Dictionary<SymbolTypeEnum, List<SymbolDescr>> typeSymbolsSettingsData;

SymbolDescr 是:

class SymbolDescr
{
    public string symbol { get; set; }
    public int classification { get; set; }
}

想法是将它们按symbolType分组并将其用作字典的Key,并生成SymbolDescr列表。到目前为止,这是我的代码:

typeSymbolsSettingsData = symbolSettings.GroupBy(p => p.symbolType)
            .ToDictionary(p => p.Key, p => p.ToList());

我卡在这一步了,你知道我该怎么做吗?

您可以使用 Select 将您的 SymbolSettingsModel 个实例投影到 SymbolDescr 个实例中:

typeSymbolsSettingsData = symbolSettings
    .GroupBy(p => p.symbolType)
    .ToDictionary(
        p => p.Key,
        p => p.Select(x => new SymbolDescr
        {
            symbol = x.symbolName,
            classification = (int)x.symbolClassification
        })
        .ToList());

您还应尽量遵守强制使用 PascalCase 的 .Net property naming convention