Выберите метод в списке <t> Коллекция

У меня есть приложение asp.net, и теперь я использую наборы данных для обработки данных. Недавно я начал конвертировать этот набор данных в коллекцию List. Но в некоторых местах это не работает. Один из них заключается в том, что в моей старой версии я использую datarow[] drow = dataset.datatable.select(searchcriteria). Но в коллекции List нет метода для нахождения определенных значений. Есть ли способ выбрать некоторые значения в соответствии с критериями поиска? Я хочу знать, возможно ли это. Пожалуйста, помогите мне.

Ответ 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);