C# Linq 或 Lambda 从类中获取字典<字符串、列表<字符串>>
本文关键字:字符串 字典 列表 获取 Linq Lambda | 更新日期: 2023-09-27 18:30:28
我似乎找不到我正在寻找的答案。希望这里有人可以帮忙。
我有一个包含某些进程设置信息的类。每个类都有一个进程 Id、taskID 和我当前逻辑不需要的各种其他信息。
public class ProcessSetting
{
public int ProcessId { get; set; }
public int TaskId { get; set; }
// Other properties not needed
}
可以存在多个进程设置。我正在将数据拉入列表。可以将一个进程 ID 与多个 TaskId 相关联。例如:
ProcessId: 1, TaskId: 1
ProcessId: 1, TaskId: 1
ProcessId: 1, TaskId: 2
ProcessId: 1, TaskId: 3
ProcessId: 2, TaskId: 3
ProcessId: 2, TaskId: 4
ProcessId: 3, TaskId: 1
我最初使用 linq 从现有枚举中收集我需要的值:(在末尾使用 distinct 以避免拉入 ProcessId 1 和 TaskId 1 的多记录集)
var baseSettings = (from setting in processSettings
select new
{
ProcessStr = ((ProcessEnum)setting.ProcessId).ToString(),
TaskStr = ((TaskEnum)setting.TaskId).ToString()
}).Distinct();
现在这给了我一个列表,只有processId和taskId。我在这里找到了一些逻辑,引导我朝着正确的方向前进,但并不是我所需要的。这是:
Dictionary<string, List<string> = baseSettings.GroupBy(x => x.ProcessStr).ToDictionary(x => x.Key, x => x.ToList());
但是,这是不正确的。我收到一个错误:
"无法转换源类型
System.Collections.Generic.Dictionary<string,System.Generic.List{ProcessStr:string, TaskStr:string}>>
目标类型System.Collections.Generic.Dictionary<string,System.Collections.Generic.List<string>>
我不想要值为 {ProcessStr, TaskStr} 的键。谁能指出我正确的方向?
而不是
x.ToList
,您必须首先选择匿名类型的字符串属性:
Dictionary<string, List<string>> procTasks = baseSettings
.GroupBy(x => x.ProcessStr)
.ToDictionary(g => g.Key, g => g.Select(x => x.TaskStr).ToList());