Wybierz metodę w kolekcji List

Mam asp.net aplikacji, a teraz używam zestawów danych do manipulacji danymi. Ostatnio zacząłem konwertować ten zbiór danych do kolekcji List. Ale w niektórych miejscach to nie działa. Jednym z nich jest to, że w mojej starej wersji używam datarow[] drow = dataset.datatable.select(searchcriteria). Jednak w zbiorze List nie ma dostępnej metody znajdowania konkretnych wartości. Czy jest jakiś sposób dla mnie, aby wybrać niektóre wartości według moich kryteriów wyszukiwania? Chcę wiedzieć, czy to możliwe. Proszę, pomóż mi.

Author: Zachary Dow, 2010-09-27

4 answers

Na początek List<T> czy ma FindAll oraz ConvertAll metody - ale bardziej idiomatycznym, nowoczesnym podejściem jest użycie 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);

Będziesz potrzebował dyrektywy using w pliku, aby to zadziałało:

using System.Linq;

Zauważ, że nie używają łańcuchów do wyrażania predykatów i projektów - używają delegatów, Zwykle utworzonych z wyrażeń lambda, jak powyżej.

Jeśli wyrażenia lambda i LINQ są dla Ciebie nowe, sugerowałbym Ci książkę covering LINQ first, np. LINQ w akcji, Pro LINQ, C # 4 w pigułce lub moje własne C# w głębi. Z pewnością możesz nauczyć się LINQ tylko z samouczków internetowych, ale myślę, że jest to tak ważna Technologia, że warto poświęcić czas, aby nauczyć się jej dokładnie.

 129
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-29 00:25:23

Możesz również spróbować

var query = from p in list
            where p.Age > 18
            select p;
 8
Author: anishMarokey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-27 07:17:52

Spróbuj tego:

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

Używając wyrażenia lambda Proszę użyć tego wyrażenia:

var result = list.where(i => i.age > 45);
 3
Author: Hemant Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-29 00:26:09

Generic List<T> mieć Where<T>(Func<T, Boolean>) metoda rozszerzenia, która może być używana do filtrowania danych.

W Twoim przypadku z tablicą wierszy:

var rows = rowsArray.Where(row => row["LastName"].ToString().StartsWith("a"));

Jeśli używasz DataRowCollection, najpierw musisz ją rzucić.

var rows = dataTableRows.Cast<DataRow>().Where(row => row["LastName"].ToString().StartsWith("a"));
 3
Author: Danil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 13:53:57