web-dev-qa-db-ja.com

別のList <string>からの文字列値を含むLinqフィルターList <string>

私は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のファイルを検索しようとしていました。同様のことをしようとしている人のために、以下の答えをマークしました。

26
Mark Johnson

さらに簡単:

fileList.Where(item => filterList.Contains(item))

完全一致ではなく「次を含む」でフィルタリングする場合は、次の式を使用できます。

var t = fileList.Where(file => filterList.Any(folder => file.ToUpperInvariant().Contains(folder.ToUpperInvariant())));
50
fixagon

以下を試してください:

var filteredFileSet = fileList.Where(item => filterList.Contains(item));

filteredFileSetLINQ Execution を参照)を反復処理すると、IEnumberable値のセットで構成されます。これは、fileListデータセット内の項目がfilterListセット。

fileListIEnumerable文字列値のセット なので、 'itemを渡すことができます '値を含むメソッドに直接。

8
Jamie Keeling

出来るよ

var filteredFileList = fileList.Where(fl => filterList.Contains(fl.ToString()));
1
Akrem