1

我有一个包含文件名列表的目录。

VAH007157100-pic1.jpg
VAH007157100-pic2.jpg
VAH007157100-pic3.jpg

WAZ009999200-pic1.jpg
WAZ009999200-pic2.jpg
WAZ009999200-pic3.jpg

我想知道子串 (0, 12) 的不同计数。

由于某种原因,这不起作用:

string[] originalFiles = Directory.GetFiles(SelectedDirectory);

private int GetDistinctPolicyCountInDirectory()
        {
            var prefixes = originalFiles
                .GroupBy(x => x.Substring(0, 12))
                .Select(y => new { Policy = y.Key, Count = y.Count() });

            return prefixes.Count();
        }

我一直得到 0。我在这里遗漏了什么吗?

请注意,我不想进行拆分以将数字分开。我想通过子串来做到这一点。

更新 -

private int GetDistinctPolicyCountInDirectory(string[] originalFiles)
        {
            var count = originalFiles.Distinct(x => Path.GetFileName(x).Substring(0, 12)).Count();

            return Convert.ToInt32(count);
        }

我在这里遇到一个错误,它说:错误1无法将lambda表达式转换为类型'System.Collections.Generic.IEqualityComparer',因为它不是委托类型

4

2 回答 2

6

我只是考虑使用.Distinct().

此外,您需要将其剥离为文件名而不是完整的文件路径。

originalFiles.Select(x => Path.GetFileName(x).Substring(0, 12))
             .Distinct().Count();
于 2012-08-13T14:52:53.303 回答
2

GetFiles返回具有完整路径的文件名数组,包括目录。您只想比较文件名,因此您应该考虑使用Path.GetFileName.

GroupBy(x => Path.GetFileName(x).Substring(0, 12));

于 2012-08-13T14:54:10.097 回答