Выберите метод в списке <t>Коллекция - PullRequest
47 голосов
/ 27 сентября 2010

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

Ответы [ 5 ]

140 голосов
/ 27 сентября 2010

Ну, для начала List<T> имеет ли методы FindAll и ConvertAll - но более идиоматический, современный подход заключается вuse 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 только из веб-учебников, но я думаю, что это такая важная технология, что стоит потратить время на ее тщательное изучение.

8 голосов
/ 27 сентября 2010

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

var query = from p in list
            where p.Age > 18
            select p;
4 голосов
/ 27 сентября 2010

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

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

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

var result = list.where(i => i.age > 45);
3 голосов
/ 27 сентября 2010

Общий 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"));
0 голосов
/ 08 ноября 2018

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

string Email = String.Join(", ", Emails.Where(i => i.Email != "").Select(i => i.Email).Distinct());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...