私は2つのリストオブジェクトを持っています(簡略化):
var fileList = Directory.EnumerateFiles(baseSourceFolderStr, fileNameStartStr + "*", SearchOption.AllDirectories);
var filterList = new List<string>();
filterList.Add("ThisFolderName");
filterList.Add("ThatFolderName");
FileLstをフィルター処理して、filterListのフォルダー名のいずれかを含むファイルのみを返します。 (それが理にかなっていることを願っています。)
次の式を試しましたが、これは常に空のリストを返します。
var filteredFileList = fileList.Where(fl => fl.Any(x => filterList.Contains(x.ToString())));
何が得られないのか理解できないようです。明らかに何かが欠けていますが、何がわからないのでしょうか。
[編集]
わかりましたので、質問でもっと明確にすべきだったように見えます。filterListの文字列値を含む部分文字列でfileListのファイルを検索しようとしていました。同様のことをしようとしている人のために、以下の答えをマークしました。
さらに簡単:
fileList.Where(item => filterList.Contains(item))
完全一致ではなく「次を含む」でフィルタリングする場合は、次の式を使用できます。
var t = fileList.Where(file => filterList.Any(folder => file.ToUpperInvariant().Contains(folder.ToUpperInvariant())));
以下を試してください:
var filteredFileSet = fileList.Where(item => filterList.Contains(item));
filteredFileSet( LINQ Execution を参照)を反復処理すると、IEnumberable値のセットで構成されます。これは、fileListデータセット内の項目がfilterListセット。
fileListは IEnumerable文字列値のセット なので、 'itemを渡すことができます '値を含むメソッドに直接。
出来るよ
var filteredFileList = fileList.Where(fl => filterList.Contains(fl.ToString()));