У меня есть следующий код:Как фильтровать строку [] с помощью LINQ?
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
}
}
Но это не компилируется и дает мне следующую ошибку:
Cannot convert type 'AnonymousType#1' to 'string'
Я смотрел на этот пример: http://www.dotnetlearners.com/linq/linq-to-string-array-with-example.aspx
И это С.О. вопрос: How do I use LINQ Contains(string[]) instead of Contains(string)
Но я не был уверен, что uid
в этом конкретном случае или как применить решение к моей проблеме.
Я также попытался
var filteredIssues = issues.Select(x => x.Contains(project)).ToArray();
Но что возвращает массив BOOLS.
dir
указывает на папку «Проекты», которая будет содержать N уникально названных папок. Каждая папка будет содержать папку «Active» и «Archived», содержащую все текстовые файлы (что и содержит issues
, и я просто пытаюсь фильтровать issues
на основе Project, чтобы загрузить их в пользовательский интерфейс, сгруппированный по проекту)
в конце концов я хочу LINQ эквивалент этого SQL заявление:
SELECT issue FROM issues WHERE issue LIKE '%project%'
Хотя сейчас, когда я пишу это, я понимаю, что я просто не могу просто сделать string[] issues = Directory.GetFiles(project, "*.txt", SearchOptions.AllDirectories)
внутри первого foreach
цикла, а не снаружи. Но мне все еще интересно, как вы можете фильтровать коллекцию строк на основе значений, которые содержат другое значение.
попробуйте 'foreach (var issue в filtersIssues) {Console.WriteLine (issue.f); } ' – Eser
Редко бывает, что анонимный тип имеет только одно свойство. Поэтому вместо 'select new {f = fi}' вы можете сказать 'select fi' –
. Что относительно: var filterIssues = issues.Where (x => x.Contains (project)). ToArray() ;? – SimonGates