【发布时间】:2019-08-09 13:49:57
【问题描述】:
我目前在将列表转换为字典时遇到了一些困难。
该列表如下所示:
List<Assignment> list = new List<Assignment>();
public class Assignment {
public String Id {get;}
public String Name {get;}
public String Product {get;}
public String Content {get;}
}
由于 Id 和 Name 都多次出现在列表中,因此 Id 和 Name 形成一个复合键。 产品和内容共同代表一个条目。
Id 和 Name 的元组用于确定所有相关产品/内容组合的列表:
Tuple<string, string> // string1 = Id, string2 = Name
问题是:如何使用LINQ扩展方法ToDictionary()将列表转化为如下形式?
Dictionary<Tuple<string, string>, ICollection<Tuple<string, string>>>
结果应该是一个提供所有产品列表及其内容的字典,如下所示:
dict.TryGetValue(Tuple.Create("123", "Username"), out collection);
提前致谢:)
【问题讨论】:
-
不,这不是家庭作业。我对 Linq 表达式本身进行了一些试验,结果朝着那个方向发展: .ToDictionary (x => Tuple.Create (x.Id, x.Name), x => new List
> ()) 但是,这会导致 ArgumentException,因为它尝试多次添加键。老实说,我的 LINQ 知识还很新鲜。 -
您确定
Id不是唯一的吗?如果不是唯一的,为什么要命名为Id? -
不是唯一的。该用例类似于暴雪环境中的战斗标签,其中名称可能由于关联的数字而出现多次,并且共同唯一地标识用户。
标签: c# .net list linq dictionary