У меня есть приложение asp.net, и теперь я использую наборы данных для обработки данных. Недавно я начал конвертировать этот набор данных в коллекцию List. Но в некоторых местах это не работает. Один из них заключается в том, что в моей старой версии я использую datarow[] drow = dataset.datatable.select(searchcriteria)
. Но в коллекции List нет метода для нахождения определенных значений. Есть ли способ выбрать некоторые значения в соответствии с критериями поиска? Я хочу знать, возможно ли это. Пожалуйста, помогите мне.
Выберите метод в списке <t> Коллекция
Ответ 1
Ну, для начала List<T>
имеет FindAll
и ConvertAll
- но тем более идиоматичным, современным подходом является использование LINQ:
// Find all the people older than 30
var query1 = list.Where(person => person.Age > 30);
// Find each person name
var query2 = list.Select(person => person.Name);
Для выполнения этой работы вам понадобится директива по использованию:
using System.Linq;
Обратите внимание, что они не используют строки для выражения предикатов и проектов - они используют делегаты, обычно созданные из лямбда-выражений, как указано выше.
Если лямбда-выражения и LINQ новы для вас, я бы предложил вам сначала получить книгу, охватывающую LINQ, такую как LINQ в действии, Pro LINQ, С# 4 в двух словах или мой собственный С# в глубине. Вы, конечно, можете узнать LINQ только из веб-уроков, но я думаю, что это такая важная технология, стоит потратить время, чтобы изучить ее полностью.
Ответ 2
вы также можете попробовать
var query = from p in list
where p.Age > 18
select p;
Ответ 3
Общие List<T>
имеют Where<T>(Func<T, Boolean>)
метод расширения, который может использоваться для фильтрации данных.
В вашем случае с массивом строк:
var rows = rowsArray.Where(row => row["LastName"].ToString().StartsWith("a"));
Если вы используете DataRowCollection
, вам нужно выполнить его сначала.
var rows = dataTableRows.Cast<DataRow>().Where(row => row["LastName"].ToString().StartsWith("a"));
Ответ 4
Попробуйте следующее:
using System.Data.Linq;
var result = from i in list
where i.age > 45
select i;
Используя выражение лямбда, используйте это выражение:
var result = list.where(i => i.age > 45);