私は次のコードを持っています:
string[] projects = Directory.GetDirectories(dir, "*", SearchOptions.TopDirectoryOnly);
string[] issues = Directory.GetFiles(dir, "*.txt", SearchOptions.AllDirectories)
foreach (string project in projects)
{
var filteredIssues = from fi in issues where fi.Contains(project) select new { f = fi };
foreach(string issue in filteredIssues)
{
// do something
}
}
しかし、これはコンパイルされず、次のエラーが発生します。
タイプ「AnonymousType#1」を「文字列」に変換できません
私はこの例を見ていました:http://www.dotnetlearners.com/linq/linq-to-string-array-with-example.aspx
そしてこのSOの質問:Contains(string)の代わりにLINQContains(string [])を使用するにはどうすればよいですか
しかしuid
、その特定のケースで何が起こっているのか、または私の問題に解決策をどのように適用するのか、私にはよくわかりませんでした。
私も試しました
var filteredIssues = issues.Select(x => x.Contains(project)).ToArray();
しかし、それはブールの配列を返します。
dir
N個の一意の名前のフォルダーを含む「Projects」フォルダーを指します。そこにある各フォルダーには、いくつものテキストファイルを含む「アクティブ」フォルダーと「アーカイブ」フォルダーがissues
含まれます(これが含まれているのでissues
、プロジェクトごとにフィルター処理して、プロジェクトごとにグループ化されたUIにロードしようとしています)
最終的には、このSQLステートメントと同等のLINQが必要です。
SELECT issue FROM issues WHERE issue LIKE '%project%'
これを書いているときにstring[] issues = Directory.GetFiles(project, "*.txt", SearchOptions.AllDirectories)
、最初のforeach
ループの外側ではなく、内側から簡単に実行できることに気付きました。しかし、別の値を含む値に基づいて文字列のコレクションをフィルタリングする方法については、まだ興味があります。
Whereを使用してコレクションをフィルタリングできます。そのようです:
var filteredIssues = issues.Where(x => x.Contains(project)).ToArray()
Selectは、1つIEnumerbale<Type>
を別の1つに投影するためのものIEnumerbale<Type2>
です。マッピングのように考えると、ターゲットタイプにマッピングするものを選択できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加