我正在构建一个库应用程序。我有一个书籍列表,其中一些书籍有一个重复的名称(同一本书的副本很少)。我想将列表转换为Dictionary>,其中字符串将是书的名称,List将包含具有此名称的所有Book对象。
我设法做到这一点:
var result = queriedBooks
.GroupBy(b => b.Name)
.Where(g => g.Count() >= 1)
.ToDictionary(b => b.Key, /// );
这是我被卡住的地方。我不知道该作为一个值传递什么。 Intellisense也没有帮助,因为没有Value
属性可用。我想避免使用匿名对象,因为每个Book条目都有许多我在视图中使用的属性。
非常感谢!
答案 0 :(得分:6)
您应该像这样使用ToList()
:
.ToDictionary(b => b.Key, b => b.ToList());
每个组都有Key
属性,这是关键。它(该组)也是一个IEnumerable<Book>
,代表组中的项目,这就是ToList()
工作的原因。
答案 1 :(得分:6)
作为替代方案,您可能只想Lookup<String, Book>
而不是精简版Dictionary<String, List<Book>>
:
LookUp<String, Book> result = queriedBooks
.ToLookup(book => book.Name);
如果是Dictionary<String, List<Book>>
:
var result = queriedBooks
.GroupBy(book => book.Name)
.ToDictionary(chunk => chunk.Key, chunk => chunk.ToList());
请注意,.Where(g => g.Count() >= 1)
多余;
答案 2 :(得分:1)
尝试使用ToList
distinct
,例如在表中,列可能包含许多重复值;有时你只想列出不同的(不同的)值。
var query = queriedBooks
.Distinct()
.GroupBy(b => b.Name)
.ToDictionary(b => b.Key, b.ToList() );
请不要使用它.Where(g => g.Count() >= 1)
这是多余的