正在尝试获取一组文件中的不同标识符的集合。我在这个Lambda查询中做错了什么:
var enumDir = Directory.GetFiles(folder);
var distinctCode = enumDir.Select(s => Path.GetFileName(s).Substring(8, 4))
.GroupBy(s => s.ToString());先谢谢你...
编辑
@empi建议。我希望从文件名中获得不同的4个字母的子字符串的列表,我得到的是什么都没有,或者是我放入的第一个Path.Get……也是组的一部分,我得到了一个索引超出范围的异常。
@Oskar Kjellin建议我应该提一下,每个文件名都有45个字符的设置长度
最终解决方案|感谢empi和Oskar
var enumDir = Directory.GetFiles(folder).Where(a => Path.GetFileName(a).Length > 12);
var distinctCode = enumDir.Select(s => Path.GetFileName(s).Substring(8, 4)).Distinct();真的是这两个建议的组合,我真的不知道该为谁标记答案。
发布于 2012-04-29 03:20:27
在调用子字符串之前,应始终检查长度,以避免出现异常...
enumDir = Directory.GetFiles(folder);
distinctCode = enumDir.Select(s => Path.GetFileName(s))
.Select( s=> s.Length >= 12 ? s.Substring(8, 4) : s).GroupBy(s => s);您永远无法真正控制文件夹中有哪些文件。例如,windows可以创建thumbs.db,这是图像或其他临时文件的缩略图的缓存。
也许您只想过滤掉具有固定长度的那些:
enumDir = Directory.GetFiles(folder);
distinctCode = enumDir.Select(s => Path.GetFileName(s)).Where(s=>s.Length == 45)
.Select( s=> s.Substring(8, 4)).GroupBy(s => s);发布于 2012-04-29 03:24:21
enumDir.Select(s => Path.GetFileName(s).Substring(8, 4)) -这段代码应该返回IEnumerable<string> - check,如果这个集合是ok的话。如果可以,那么就使用Distinct()。
发布于 2012-04-29 03:34:09
我怀疑您想要的是获取实际的文件名,但是按子字符串对它们进行分组。
var result = Directory.GetFiles(folder)
.Select(s => Path.GetFileName(s))
.Where(s => s.Length > 12)
.GroupBy(s => s.Substring(8, 4));现在,在result中,您拥有以Key为子字符串的组对象,如果枚举它们,您将获得与该键匹配的实际文件名。
https://stackoverflow.com/questions/10366691
复制相似问题