I have the following code:
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
}
}
但是这段代码无法编译,会出现以下错误:
我参考了这个示例:http://www.dotnetlearners.com/linq/linq-to-string-array-with-example.aspx 和这个 Stack Overflow 问题:如何使用 LINQ Contains(string[]) 而不是 Contains(string) 但我不确定在那个特定的情况下无法将类型“AnonymousType#1”转换为“string”
uid
是什么,也不知道如何将解决方案应用到我的问题上。我还尝试了:
var filteredIssues = issues.Select(x => x.Contains(project)).ToArray();
但是它返回一个布尔数组。
dir
指向一个名为“Projects”的文件夹,其中包含 N 个唯一命名的文件夹。每个文件夹中都包含一个“Active”和一个“Archived”文件夹,其中包含任意数量的文本文件(即 issues
包含的内容,我想要筛选出基于项目的 issues
并将它们分组加载到UI中)。最终,我想要得到这个 SQL 语句的 LINQ 等效语句:
SELECT issue FROM issues WHERE issue LIKE '%project%'
尽管我现在写这篇文章时意识到,我可以在第一个foreach循环中使用
string[] issues = Directory.GetFiles(project, "*.txt", SearchOptions.AllDirectories)
来获取文件数组,而不是在外面。但我仍然好奇如何根据包含另一个值的值来过滤字符串集合。
foreach(var issue in filteredIssues){ Console.WriteLine(issue.f); }
- Eserselect fi
代替select new { f = fi }
。 - Dennis_E