2010-09-27 12 views
38

Tengo una aplicación asp.net, y ahora estoy usando conjuntos de datos para la manipulación de datos. Recientemente comencé a convertir este conjunto de datos a una colección de Lista. Pero, en algunos lugares, no funciona. Una es que en mi versión anterior estoy usando datarow[] drow = dataset.datatable.select(searchcriteria). Pero en la colección Lista no hay un método disponible para encontrar valores particulares. ¿Hay alguna manera de seleccionar algunos valores de acuerdo con mis criterios de búsqueda? Quiero saber si esto es posible. Por favor, ayúdame.Seleccione el método en la lista <t> Colección

Respuesta

118

Bueno, para empezar List<T> qué tienen los FindAll y métodos ConvertAll -, pero el enfoque más idiomática, moderno es el uso de 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); 

que necesitará una directiva using en su archivo de hacer este trabajo:

using System.Linq; 

en cuenta que estos no utilizan cuerdas para expresar predicados y proyectos - que utilizan delegados, por lo general creado a partir de las expresiones lambda que el anterior .

Si las expresiones lambda y LINQ son nuevos para usted, sugeriría usted consigue un libro que cubre LINQ primera, como LINQ in Action, Pro LINQ, C# 4 in a Nutshell o mi propia C# in Depth. Ciertamente, puede aprender LINQ solo de tutoriales web, pero creo que es una tecnología tan importante, vale la pena tomarse el tiempo para aprenderlo a fondo.

3

genérico List<T> tiene el método de extensión Where<T>(Func<T, Boolean>) que se puede utilizar para filtrar los datos.

En su caso con una matriz fila:

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

Si está utilizando DataRowCollection, necesita para su emisión en primer lugar.

var rows = dataTableRows.Cast<DataRow>().Where(row => row["LastName"].ToString().StartsWith("a")); 
7

puede también tratar

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

Prueba esto:

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

El uso de la expresión lambda por favor utilice esta declaración:

var result = list.where(i => i.age > 45); 
Cuestiones relacionadas