it-swarm.com.ru

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

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

45
MAC

Ну, для начала с List<T>есть есть методы FindAll и ConvertAll - но более идиоматичный, современный подход заключается в использовании LINQ:

// Find all the people older than 30
var query1 = list.Where(person => person.Age > 30);

// Find each person's name
var query2 = list.Select(person => person.Name);

Вам понадобится директива using в вашем файле, чтобы эта работа работала:

using System.Linq;

Обратите внимание, что они не используют строки для выражения предикатов и проектов - они используют делегаты, обычно созданные из лямбда-выражений, как указано выше.

Если лямбда-выражения и LINQ являются новыми для вас, я бы посоветовал вам сначала получить книгу, посвященную LINQ, такую ​​как LINQ в действии , Pro LINQ , C # 4 в двух словах или моя собственная C # в глубине . Вы, конечно, можете изучать LINQ только из веб-учебников, но я думаю, что это такая важная технология, что стоит потратить время на ее тщательное изучение.

133
Jon Skeet

вы также можете попробовать

var query = from p in list
            where p.Age > 18
            select p;
8
anishMarokey

Попробуй это:

using System.Data.Linq;
var result = from i in list
             where i.age > 45
             select i;

Используя лямбда-выражение, пожалуйста, используйте это утверждение:

var result = list.where(i => i.age > 45);
4
Hemant Kumar

Универсальный 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"));
3
Danil

Я использовал сценарий, но чтобы присоединиться, может быть, я могу помочь вам

string Email = String.Join(", ", Emails.Where(i => i.Email != "").Select(i => i.Email).Distinct());
0
Luiz Pampu