Member 10281805 Ответов: 3

Список фильтров & lt;string & gt; с помощью linq


Привет,
Я хочу отфильтровать список строк на основе некоторого условия, как указано ниже,
List<string> config = new List<string>();
               config.Add("userdata.member1");
               config.Add("userdata.member2");
               config.Add("userdata.member3");
               config.Add("userdata.member4");
               config.Add("userdata.member5");
               config.Add("attribute.memberattribute1");
               config.Add("attribute.memberattribute2");
               config.Add("attribute.memberattribute3");
               config.Add("attribute.memberattribute4");
               config.Add("attribute.memberattribute5");

               string[] userDataKeys = config.Select(x => x.Contains("userdata.")?x.Replace("userdata.",""):x).ToArray();


Что я уже пробовал:

Я хочу проверить, есть ли в строке "userdata." и заменить ее пустой строкой, наконец, вернуть только замененные элементы.

Ожидаемый результат:
член1
member2
member3
элементе 4
member5

может ли кто-нибудь сказать мне, как достичь этого с помощью linq?

Спасибо.

3 Ответов

Рейтинг:
22

Pete O'Hanlon

Ты почти на месте. Сначала вам нужно определить, какие записи содержат userdata.. Здесь помогает пункт where:

config.Where(x => x.StartsWith("userdata.")).Select(x => x.Replace("userdata.", string.Empty)).ToList();


Maciej Los

5ед!
Примечание: нет никакой необходимости использовать .Начните или .Содержится способ. Заменить должно быть достаточно просто. Проверьте мой ответ.

Pete O'Hanlon

Если пользователь хотел только заменить строку, то Replace было бы достаточно; поскольку он также хотел вернуть список записей, которые он изменил, список должен быть сначала отфильтрован - отсюда и предложение Where с использованием StartsWith.

Рейтинг:
19

Karthik_Mahalingam

пробовать

string[] userDataKeys = config.Where(x => x.Contains("userdata.")).Select(x => x.Replace("userdata.", "") ).ToArray();


Maciej Los

5ед!
Примечание: нет никакой необходимости использовать .Начните или .Содержится способ. Заменить должно быть достаточно просто. Проверьте мой ответ.

Karthik_Mahalingam

Спасибо Мацей

но ОП
Ожидаемый результат
член1
member2
member3
элементе 4
member5

Maciej Los

Я знаю, поэтому моя вторая часть ответа соответствует критериям ОП ;)

Karthik_Mahalingam

:) счетчик 5!

Maciej Los

Спасибо, Картик

Рейтинг:
1

Maciej Los

Там нет необходимости использовать .StartWith или .Contains метод. Простой .Replace должно быть достаточным :)

var result = config.Select(x=>x.Replace("userdata.", string.Empty)).ToList();


Конечно, если вы хотите вернуть только данные с member словом, вы можете использовать:
var result = config.Where(x=>x.Contains("member")).Select(x=>x.Replace("userdata.", string.Empty)).ToList();