C# 按属性将对象分组到字典

C# 按属性将对象分组到字典,c#,C#,我想按扩展名对文件进行分组。我的FileDto如下所示: public class FileDto { public string Extension { get; set; } public string Filename { get; set; } } 我想使用字典(或任何其他集合)按扩展名对我的文件进行分组(例如“.txt”,“.doc”)等。我开始编写一些代码: // input.Files = IEnumerable<FileDto> Diction

我想按扩展名对
文件进行分组。我的
FileDto
如下所示:

public class FileDto
{
    public string Extension { get; set; }

    public string Filename { get; set; }
}

我想使用
字典(或任何其他集合)按
扩展名对我的
文件进行分组(例如
“.txt”
“.doc”
)等。我开始编写一些代码:

// input.Files = IEnumerable<FileDto>

Dictionary<string, IEnumerable<FileDto>> dict = input.Files
    .GroupBy(x => x.Extension) // i want to Extension by my key (list of txts, list of docs etc)
    .ToDictionary(y => y.Key); // not working

foreach (var entry in dict)
{
    // do something with collection of files
}
//input.Files=IEnumerable
Dictionary dict=input.Files
.GroupBy(x=>x.Extension)//我想按我的键进行扩展(TXT列表、文档列表等)
.ToDictionary(y=>y.Key);//不起作用
foreach(dict中的var条目)
{
//对文件集合执行一些操作
}

我的问题是,如何按属性对对象列表进行分组?

好的,您可以传递第二个参数并将IGrouping强制转换为enumerable

input.GroupBy(x => x.Extension).ToDictionary(y => y.Key, y => y.AsEnumerable());

您可以传递第二个参数并将IGrouping强制转换为enumerable

input.GroupBy(x => x.Extension).ToDictionary(y => y.Key, y => y.AsEnumerable());
var groups=input.Files
.GroupBy(x=>x.Extension)
foreach(组中的var grp)
{
//扩展的grp.Key
//文件的foreach(grp中的var文件)
}
ToLookup
的工作原理类似,如果通过键多次访问(您可以执行
var grp=lookup[key];
),它会很有用,但在LINQ中对某些资源(数据库等)而言,它的“可组合性”较差

var groups=input.Files
.GroupBy(x=>x.Extension)
foreach(组中的var grp)
{
//扩展的grp.Key
//文件的foreach(grp中的var文件)
}

ToLookup
的工作原理类似,如果通过键多次访问(您可以执行
var grp=lookup[key];
),它会很有用,但在LINQ中对某些资源(数据库等)而言,它的“可组合性”较差

谢谢你的回答。理解
i分组
真的很有帮助,但是我想要一本字典,不过还是要谢谢你@michasaucer然后就像我说的:使用
ToLookup
,它的功能类似于一个字典,除了它是用于key=>multiple(而不是key=>single,字典就是这样做的)谢谢你的回答。理解
i分组
真的很有帮助,但是我想要一本字典,不过还是要谢谢你@michasaucer然后像我说的那样:使用
ToLookup
,它的功能类似于一个字典,除了它用于key=>multiple(而不是key=>single,这是字典的功能)