C# Lambda表达式返回数组中排除的值

C# Lambda表达式返回数组中排除的值,c#,lambda,C#,Lambda,我有一些文件夹,我正在阅读和处理一些文件 const string claims = @"\\myServerPath\Incident Reports\"; const string archive = @"\\myServerPath\Incident Reports\Archive\"; const string errorData = @"\\myServerPath\Incident Reports\DataEr

我有一些文件夹,我正在阅读和处理一些文件

    const string claims = @"\\myServerPath\Incident Reports\";
    const string archive = @"\\myServerPath\Incident Reports\Archive\";
    const string errorData = @"\\myServerPath\Incident Reports\DataErrorFiles\";
我能够通读并提取这些文件中所需的所有数据

然后我将两个文件dir、archive和errorData放在这样的数组中

string[] excludeDirectories = new string[] { archive, errorData };
List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories).Where(d => excludeDirectories.All(e =>!d.StartsWith(e))).ToList();

foreach(string s in SortByLength(dirs))
{
    if (Directory.GetFiles(s).Count() == 0)
    {
         Directory.Delete(s);
    }
}
然后我试着循环,像这样做一些清理

string[] excludeDirectories = new string[] { archive, errorData };
List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories).Where(d => excludeDirectories.All(e =>!d.StartsWith(e))).ToList();

foreach(string s in SortByLength(dirs))
{
    if (Directory.GetFiles(s).Count() == 0)
    {
         Directory.Delete(s);
    }
}
List dirs=Directory.GetDirectories(claims,“*”,SearchOption.AllDirectories)。其中(d=>excludeditories.All(e=>!d.StartsWith(e))).ToList();
foreach(排序长度(dirs)中的字符串s)
{
if(Directory.GetFiles.Count()==0)
{
目录。删除;
}
}
每次删除两个目录时。。我的lambda表达式中有什么错误使得它一直包含这两个

更奇怪的是,在我处理文件的顶部,我以类似的方式拾取文件,这很有效。将忽略存档或数据错误文件中的文件

List<string> processFiles = Directory.GetFiles(claims, "*.xlsx",
                    SearchOption.AllDirectories).Where(d => excludeDirectories.All(e =>!d.StartsWith(e))).ToList();
List processFiles=Directory.GetFiles(声明“*.xlsx”,
其中(d=>excludeDirectories.All(e=>!d.StartsWith(e))).ToList();
当我在索赔的“根”目录中有一个文件时,它将拾取这些文件并处理它们。然后,它会相应地将它们移动到存档或出错位置。当我再次运行(文件现在位于存档中)时,我不会再次读取该文件。“排除”正在获取excel文件,但没有进行目录清理。

这可能是大小写问题-请尝试更改
StartsWith()
调用以进行不区分大小写的比较:

d => excludeDirectories.All(e =>!d.StartsWith(e, StringComparison.InvariantCultureIgnoreCase))

像这样的怎么样

List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories)
    .Where(d => !excludeDirectories.Any(e => d.StartsWith(e)))
    .ToList();
List dirs=Directory.GetDirectories(声明,“*”,SearchOption.AllDirectories)
.Where(d=>!excludeDirectories.Any(e=>d.StartsWith(e)))
.ToList();

相同的结果:(当我在debug中停留时,ExcludeDirectory中的值和dirs中的值看起来完全相同?是的!TYSM!我对我的原始帖子进行了编辑,关于我处理文件的第一部分。。为什么我的lambda在那里似乎工作正常,但在这里不工作?TBH我不太确定你的'where'在做什么。我假设你想要所有的dirs。)t没有以任何排除目录开头。
excludeditories.any(e=>d.StartsWith(e))
询问“在
excludeditories
中是否有任何东西以
d
开头?”。
给出相反的结果。因此,如果某个东西以
d
开头,我们得到一个false,并且
Where
排除该元素。