Перебрать все флажки в xaml и составить строку из их содержимого - PullRequest
0 голосов
/ 12 марта 2019

Я перебираю все флажки с этим кодом.

string where = string.Empty;

foreach (CheckBox c in gridApi.Children.OfType<CheckBox>())
{
    if (c.IsChecked == true)
    {
        MessageBox.Show(where += "CategoryMulti like '%" + c.Content.ToString() + "%'");
    }
}

Из этих флажков я хотел бы построить одну строку ( где переменная) для команды SQL:

выберите телефон из списка контактов, где CategoryMulti похож на '% 1%'

Проблема в том, что мне нужно иметь или между sql-подобными тегами, подобными этому

выберите телефон из списка контактов, где CategoryMulti, например, «% 1%» или CategoryMulti, например, «% 2%»

Мне нужно рассказать программе, как себя вести или добавлять. Например, команда sql не может заканчиваться или

выберите телефон из списка контактов, где CategoryMulti, например, «% 1%» или CategoryMulti, например, «% 2%» или

Потому что команда sql завершится с ошибкой. Не могли бы вы помочь мне, как я могу построить что-то подобное?

У меня была идея оставить ИЛИ для каждого отмеченного флажка и получить последнюю проверенную позицию флажка в массиве и удалить последние 2 символа.

Это будет работать, я думаю, потому что каждый установленный флажок будет добавлять одинаковое количество символов в переменную , где , независимо от того, что. Проблема в том, что я понятия не имею, как добавить все флажки в массив в этом цикле. Спасибо за любую идею.

.xaml

<CheckBox Content="cul" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="chkBoxCul" Margin="325,59,0,0"/>
<CheckBox Content="inf" Visibility="Visible" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="chkBoxInfo" Margin="408,59,0,0"/>
<CheckBox Content="spo" Visibility="Visible" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="chkBoxSp" Margin="479,56,0,0"/>
<CheckBox Content="war" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="chkBoxWar" Margin="540,56,0,0"/>

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Я бы подтвердил это, используя String.Join . Например, вы можете добавить все CategoryMulti like '%1%' для ваших флажков в список, а затем использовать String.Join следующим образом:

var list = new List<string>();

foreach (CheckBox c in gridApi.Children.OfType<CheckBox>())
{

    if (c.IsChecked == true)
    {
        list.Add("CategoryMulti like '%" + c.Content.ToString() + "%'");
    }
}

var result = string.Join(" or ", list);

result теперь содержит CategoryMulti like '%1%' or CategoryMulti like'%2%' or .... Но если мы теперь добавим LINQ к миксу, мы можем даже упростить это до:

var result = string.Join(" or ", gridApi.Children
    .OfType<CheckBox>()
    .Where(c => c.IsChecked == true)
    .Select(c => "CategoryMulti like '%" + c.Content.ToString() + "%'"));
1 голос
/ 12 марта 2019

Одним из простых решений было бы добавить выражения where в List<string>. Затем вы можете использовать string.Join(" or ", yourList);

Пример:

var list = new List<string>
{
    "Asd",
    "Qwe",
    "Zxc"
};

var result = string.Join(" OR ",list);
Console.WriteLine(result);

Результатом из примера будет: «Asd ИЛИ Qwe ИЛИ Zxc»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...