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デリゲート型ではないため、ラムダ式を型'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 に答える