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.
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.
tu peux aussi essayer
var query = from p in list
where p.Age > 18
select p;
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);
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"));
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());