gpt4 book ai didi

c# - 除了 LINQ 中的 LIKE 条件

转载 作者:太空狗 更新时间:2023-10-29 17:44:25 24 4
gpt4 key购买 nike

我有一个包含文件路径的字符串列表。

List<string> allFilesWithPathList = new List<string>();

allFilesWithPathList.Add(@"G:\Test\A.sql");
allFilesWithPathList.Add(@"G:\Test\B.sql");
allFilesWithPathList.Add(@"G:\Test\C.sql");

return allFilesWithPathList;

我有另一个包含文件子集的列表——但它只有文件名;不是路径。

List<string> excludeList = new List<string>();
excludeList.Add("B.sql");

现在我需要从 allFilesWithPathList 中获取 excludeList 中不存在的文件。目前,在创建另一个仅包含文件名的列表后,我正在使用 EXCEPT 执行以下操作。

List<string> allFileNamesOnlyList = new List<string>();
foreach (string fileNameWithPath in allFilesWithPathList)
{
//Remove path and get only file name
int pos = fileNameWithPath.LastIndexOf(@"\") + 1;
string value = fileNameWithPath.Substring(pos, fileNameWithPath.Length - pos);
allFileNamesOnlyList.Add(value);
}

//EXCEPT logic
List<string> eligibleListToProcess = allFileNamesOnlyList.Except(excludeList).ToList();

LINQ 中,在不引入另一个类似上述列表的情况下使该逻辑正常工作的最佳方法是什么?

注意:我使用的是.Net 4.5

完整代码

class Program
{
static void Main(string[] args)
{
List<string> allFilesWithPathList = GetAllFilesWithPath();

List<string> excludeList = new List<string>();
excludeList.Add("B.sql");

List<string> allFileNamesOnlyList = new List<string>();
foreach (string fileNameWithPath in allFilesWithPathList)
{
//Remove path and get only file name
int pos = fileNameWithPath.LastIndexOf(@"\") + 1;
string value = fileNameWithPath.Substring(pos, fileNameWithPath.Length - pos);
allFileNamesOnlyList.Add(value);
}

//EXCEPT logic
List<string> eligibleListToProcess = allFileNamesOnlyList.Except(excludeList).ToList();

//Print all eligible files
foreach (string s in eligibleListToProcess)
{
Console.WriteLine(s);
}
Console.ReadLine();
}

public static List<string> GetAllFilesWithPath()
{
List<string> allFilesWithPathList = new List<string>();

allFilesWithPathList.Add(@"G:\Test\A.sql");
allFilesWithPathList.Add(@"G:\Test\B.sql");
allFilesWithPathList.Add(@"G:\Test\C.sql");

return allFilesWithPathList;
}
}

最佳答案

allFilesWithPathList.Where(path => !allFileNamesOnlyList.Contains(Path.GetFileName(path));

这里有两个改进。

  1. Path.GetFileName 比自己拆分路径要好得多。
  2. IEnumerable.Where 结合 ICollection.Contains 以简洁易读的方式实际查询列表。

关于c# - 除了 LINQ 中的 LIKE 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com