Search code examples
c#linqsubstring

LINQ query to find items in a list containing substring elements from a second list


I am trying to list all elements from the first list where it contains a substring equal to all elements from the second list

First list:

C:\Folder\Files_01026666.pdf
C:\Folder\Files_01027777.pdf
C:\Folder\Files_01028888.pdf
C:\Folder\Files_01029999.pdf

Second list:

01027777
01028888

List result should be:

C:\Folder\Files_01027777.pdf
C:\Folder\Files_01028888.pdf

the closer that I got was with .Intersect() but both string-element should be equals

List<string> resultList = firstList.Select(i => i.ToString()).Intersect(secondList).ToList();

List<string> resultList = firstList.Where(x => x.Contains(secondList.Select(i=>i).ToString()));

List<string> resultList = firstList.Where(x => x == secondList.Select(i=>i).ToString());

I know I can do this another way but I'd like to do it with LINQ. I have looked at other queries but I can find a close comparison to this with Linq. Any ideas or anywhere you can point me to would be a great help.


Solution

  • We can use EndsWith() with Path.GetFileNameWithoutExtension(), as strings in the secondList are not entire file names.

    var result = firstList
        .Where(path => secondList.Any(fileName => Path.GetFileNameWithoutExtension(path).EndsWith(fileName)));
    

    Try Online