Mam listę ciągów, które przechowuje ścieżki plików.Z wyjątkiem LIKE warunku w LINQ
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;
Mam inną listę, która przechowuje podzbiór plików - ale ma tylko nazwę pliku; nie ścieżkę.
List<string> excludeList = new List<string>();
excludeList.Add("B.sql");
Teraz potrzebuję uzyskać pliki z allFilesWithPathList, które nie są obecne w excludeList. Obecnie wykonuję następujące czynności, używając EXCEPT
, po utworzeniu kolejnej listy tylko z nazwami plików.
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();
Jaki jest najlepszy sposób, aby uzyskać w LINQ
tę logikę roboczą bez wprowadzania innej listy, jak wyżej?
Uwaga: Używam .Net 4.5
kompletny kod
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;
}
}