Это может быть под-вопрос к этому SO Вопрос .Я хочу проверить строку по массиву строки или списка.Пример
string address = "1st nice ave 1st floor";
//For now, I'm getting the list from a text file but could move to use an EF
List<string> streetType = File.ReadLines(AppDomain.CurrentDomain.BaseDirectory + @"streetType.csv")
.Where(x => x.Length > 0)
.Select(y => y.ToLowerInvariant())
.ToArray();
цель состоит в том, чтобы убрать лишние детали адреса после проспекта, файл csv содержит все принятые USPS типы улиц.
Это то, что у меня сейчас
//this only returns boolean value, I got this from the SO above
streetType.Any(testaddress.ToLower().Contains);
//I also have this
Array.Exists<string>(streetType, (Predicate<string>)delegate (string s)
{
return testaddress.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1;
});
Я часами искал, как решить эту проблему, затем я наткнулся на вопрос SO, который как раз то, что я тоже хочу, но мне нужно получить подстроку для удаления.
Если есть linqзапрос, это было бы здорово.Единственный способ, которым я могу думать об этом - это foreach и inner if.
Пример значений массива
Обновление:
Вот мой ответ, я забыл упомянуть, что поиск в массиве должен соответствовать точной строке из адресной строки.Я в конечном итоге с помощью регулярных выражений.Это расширенный / измененный ответ @ giladGreen.
var result = from item in streetTypes
let index = Regex.Match(address.ToLowerInvariant(), @"\b" + item.ToLowerInvariant() + @"\b")
where index.Success == true
select address.ToLowerInvariant().Substring(0, index.Index + item.Length);
Может кто-нибудь преобразовать это в лямбда-выражение?Я пытался, я потерпел неудачу.
Спасибо всем