LINQ фильтрует значения на основе выбранных значений списка флажков

#c# #asp.net #linq

#c# #asp.net #linq

Вопрос:

Я пытаюсь использовать предложение where из значений в динамически сгенерированном списке флажков в качестве критерия фильтрации для запроса LINQ.

Есть четыре поля, которые необходимо отфильтровать на основе значений списка флажков.

Как бы мне просмотреть каждое из полей и сравнить его с выбранными значениями списка флажков?

Я добавил «checkBoxListTreeTypes.selectecd values» в качестве примера.

Пример кода ниже…

     IEnumerable<IGrouping<string, Forest>> forestQuery =
    from test in forest
    where (test.tree1 == checkBoxListTreeTypes.selectedvalues)
    amp;amp; (test.tree2 == checkBoxListTreeTypes.selectecdvalues)
    amp;amp; (test.tree3 == checkBoxListTreeTypes.selectecdvalues)
    amp;amp; (test.tree4 == checkBoxListTreeTypes.selectecdvalues)
    orderby test.name
    group test by test.TrunkSize;
  

Ответ №1:

Вот как вы просматриваете список флажков (не тестировалось, но вы поняли идею):

 checkBoxListTreeTypes.Items.Any(item => item.Selected amp;amp; item.Value==test.tree1) amp;amp;
checkBoxListTreeTypes.Items.Any(item => item.Selected amp;amp; item.Value==test.tree2) amp;amp;
checkBoxListTreeTypes.Items.Any(item => item.Selected amp;amp; item.Value==test.tree3) amp;amp;
checkBoxListTreeTypes.Items.Any(item => item.Selected amp;amp; item.Value==test.tree4)
  

Вы также могли бы поместить свои четыре дерева в массив:

 string[] trees = new string[] { test.tree1, test.tree2, test.tree3, test.tree4 };
  

а затем протестируйте:

 checkBoxListTreeTypes.Items.Count(item => item.Selected amp;amp; trees.Contains(item.Value)) == 4
  

Комментарии:

1. Спасибо за ответ. Ему не нравится «.. Элементы.Любые». Я использую систему using. Пространство имен Linq. Есть ли другое пространство имен, которое мне нужно?

2. Хорошо, очевидно, что коллекция элементов имеет тип IEnumerable, а не IEnumerable<T>, как требуется для LINQ. Поэтому оно должно быть приведено с помощью: checkBoxListTreeTypes. Элементы.Приведение<ListItem>().Любой(…