web-dev-qa-db-fra.com

Sélectionner une méthode dans la liste <t> Collection

J'ai une application asp.net et j'utilise maintenant des jeux de données pour la manipulation des données. J'ai récemment commencé à convertir cet ensemble de données en une collection List. Mais dans certains endroits, cela ne fonctionne pas. La première est que, dans mon ancienne version, j'utilise datarow[] drow = dataset.datatable.select(searchcriteria). Mais dans la collection List, aucune méthode n'est disponible pour rechercher des valeurs particulières. Est-il possible pour moi de sélectionner des valeurs en fonction de mes critères de recherche? Je veux savoir si c'est possible. Aidez-moi, s'il vous plaît.

45
MAC

Eh bien, pour commencer par List<T>fait avoir les méthodes FindAll et ConvertAll - mais l'approche la plus idiomatique consiste à utiliser 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);

Vous aurez besoin d'une directive using dans votre fichier pour que cela fonctionne:

using System.Linq;

Notez que ceux-ci n'utilisent pas de chaînes pour exprimer des prédicats et des projets. Ils utilisent des délégués, généralement créés à partir d'expressions lambda comme ci-dessus.

Si les expressions lambda et LINQ sont nouvelles pour vous, je vous suggèrerais de vous procurer un livre couvrant LINQ en premier, tel que LINQ in Action , Pro LINQ , C # 4 en bref ou le mien C # en profondeur . Vous apprenez certainement pouvez LINQ à l'aide de didacticiels Web, mais je pense que c'est une technologie si importante qu'il vaut la peine de prendre le temps de bien l'apprendre.

133
Jon Skeet

tu peux aussi essayer

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

Essaye ça:

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

En utilisant l'expression lambda, veuillez utiliser cette déclaration:

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

Générique List<T> possède la méthode Where<T>(Func<T, Boolean>) qui peut être utilisée pour filtrer les données.

Dans votre cas avec un tableau de lignes:

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

Si vous utilisez DataRowCollection , vous devez le lancer en premier.

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

J'ai utilisé un script mais pour faire une jointure, je peux peut-être vous aider

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