我有两个列表; List<int> numList
具有标识号码作为其元素,并且List<string> filePaths
具有需要作为其元素进行分析的文件路径。我想根据numList
筛选filePaths
;也就是说,我只想选择其文件名具有numList
中存在的标识号的文件路径。C#LINQ语句
例如,filePaths
有
C:/test/1.test.xlsx
C:/test/2.test.xlsx
C:/test/3.test.xlsx
C:/test/4.test.xlsx
,并numList
有
1
2
在这种情况下,我想构建LINQ语句只得到
C:/test/1.test.xlsx
C:/test/2.test.xlsx
我试过
for(int i = 0; i < numList.Count; i++)
{
filePaths = filePaths.Where(f => Convert.ToInt32(GetNumberFromString(Path.GetFileName(f))) == numList[i]).ToList();
}
这是GetNumberFromString helper方法
// Find number in the string
private string GetNumberFromString(string value)
{
int number;
string resultString = Regex.Match(value, @"\d+").Value;
if (Int32.TryParse(resultString, out number))
{
return resultString;
}
else
{
throw new Exception(String.Format("No number present in the file {0}", value));
}
}
我认为这会工作,但有没有实现这一点的更优雅/有效的方法?
的路径(C:/test/1.test.xlsx)会一直这样呢? (只有数字会改变)或者你想要一个在任何路径上工作的通用函数? – Jacob
路径可以是任何文件,但所有文件都将位于同一个文件夹中。 – djskj189
'var result = filePaths.Where(path => numList.Any(num => path.Contains(num)))。ToList()' – Developer