mam 2 obiekty List (uproszczony):LINQ Lista filtr <string> gdy zawiera ciąg znaków z innej listy <string>
var fileList = Directory.EnumerateFiles(baseSourceFolderStr, fileNameStartStr + "*", SearchOption.AllDirectories);
var filterList = new List<string>();
filterList.Add("ThisFolderName");
filterList.Add("ThatFolderName");
Chcę filtrować fileLst wrócić tylko pliki zawierające dowolne nazwy folderu z filterList. (Mam nadzieję, że ma to sens).
Próbowałem następujące wyrażenie, ale zawsze zwraca pustą listę.
var filteredFileList = fileList.Where(fl => fl.Any(x => filterList.Contains(x.ToString())));
Nie mogę zrozumieć, dlaczego nic nie dostaję, wyraźnie czegoś brakuje, ale nie mam pojęcia co.
[EDIT]
Ok, więc wydaje się, że powinny być jaśniejsze w moje pytanie, starałem się wyszukać pliki w moim FileList z fragmentu zawierającego wartości ciągów z mojego filterList. Poniżej zaznaczam odpowiedź dla tych, którzy próbują zrobić coś podobnego.
Dlaczego użyłeś jakieś? var filtersFileList = fileList.Where (fl => filterList.Contains (fl)); –
Myślę, że dla twojej ekspresji, bierzesz pojedynczą listę plików niż x będzie char, to wygląda, jeśli filterList zawiera znak. (Ciąg staje się IZliczalnym) –
@ David Tryon - Nie użyłem Intersect wcześniej, chociaż uruchomiłem to , Otrzymuję pustą listę, gdy wiem, że powinna zawierać pewne wartości: var filteredFileList = fileList.Intersect (filterList); –