Как извлечь данные из массива с помощью функции split в c # - PullRequest
0 голосов
/ 22 марта 2019

У меня есть список с некоторыми именами служб и двумя текстовыми полями.В первом текстовом поле вы вводите слова, которые вы хотите включить в службу, а в другое текстовое поле вы вводите слова для исключения.Поэтому, если я введу tbOne = SQL и для tbTWo = Browser, Server.Я должен только получить администрирование SQL.Вместо этого он просматривает каждый элемент в списке и отображает его.Как я могу предотвратить это.Пожалуйста, помогите.

protected void Button1_Click(object sender, EventArgs e)
{
    string tbOne = TextBox1.Text;
    string[] tbOneArray = tbOne.Split(',');

    string tbTwo = TextBox2.Text;
    string[] tbTwoArray = tbTwo.Split(',');


    var service1 = "SQL Server Agent";
    var service2 = "SQL Browser";
    var service3 = "SQL Administration";

    List<string> listOfServices = new List<string>();

    listOfServices.Add(service1);
    listOfServices.Add(service2);
    listOfServices.Add(service3);

    foreach (var service in listOfServices)
    {
        foreach (var includedItem in tbOneArray)
        {
            foreach (var excludedItem in tbTwoArray)
            {
                if (service.Contains(includedItem) && !service.Contains(excludedItem))
                {
                    Response.Write(service);
                }
            }
        }
    }

}

Ответы [ 3 ]

0 голосов
/ 22 марта 2019

Попробуйте:

if (service.Contains(includedItem) && !(service.Contains(excludedItem)))
  {
           Response.Write(service);
  }
0 голосов
/ 22 марта 2019

Вы можете использовать метод расширения LINQ Contains с StringComparer.OrdinalIgnoreCase, чтобы сделать поиск нечувствительным к регистру.

var filteredServices = listOfServices
    .Where(svc =>
        svc.Split().Any(w => tbOneArray.Contains(w, StringComparer.OrdinalIgnoreCase)) &&
        !svc.Split().Any(w => tbTwoArray.Contains(w, StringComparer.OrdinalIgnoreCase)));
foreach (string service in filteredServices) {
    Response.Write(service);
}

Для поиска только целых слов я разделил название службы на отдельные слова.

0 голосов
/ 22 марта 2019

Попробуйте это

foreach (var service in listOfServices.Where(x=> tbOneArray.Any(a=> x.Contains(a)) &&
!tbTwoArray.Any(a=> x.Contains(a))))
{
  Response.Write(service);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...