#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>().Любой(…