2009-12-16 9 views
0

Utilisation de Oracle® Data Provider pour .NET pour générer des ensembles de données fortement typés.
Aide pour l'extension Where() (cette source IEnumerable <CUSTOMERRow>, prédicat Func <CUSTOMERRow, bool>)

Je pourrais bien sûr remplir la table entière, mais je voudrais apprendre à utiliser l'extension Where() avec une fonction de délégué qui devrait limiter le nombre de lignes collectées en fonction de certaines valeurs de table.

Paramètres pour where() extension:

(this IEnumerable<CUSTOMERRow> source, Func<CUSTOMERRow, bool> predicate) 

Le codesnippet où le délégué doit être utilisé:

StronglyTypedDataSet myDataSet = new StronglyTypedDataSet(); 

CUSTOMERTableAdapter tableAdapter = new CUSTOMERTableAdapter(); 
tableAdapter.Fill(myDataSet.CUSTOMER.Where(newfunctionhere)); 

Répondre

1

Le procédé Where peut être utilisé pour filtrer le contenu d'une collection. Mais dans votre cas vous utilisez un adaptateur de table pour remplir un DataTable vide, et en appelant Où sur une collection vide donne juste une séquence vide ... Et l'adaptateur de table ne sait pas comment interpréter l'appel Where, il utilise juste son SelectCommand pour remplir la table. Vous ne pouvez donc pas utiliser Linq pour définir les données que vous voulez charger dans la table. Mais une fois que votre table est remplie, vous pouvez utiliser Where pour filtrer les résultats, comme ça:

var rows = myDataSet.CUSTOMER.AsEnumerable().Where(cr => cr.SomeProperty == someValue); 
+0

@ Thomas Levesque: Je reçois le message d'erreur: "Type d'argument System.Data.EnumerableRowCollection n'est pas assignable au type de paramètre CUSTOMERDataTable". Des idées? –

+0

@Kb: vous ne pouvez pas affecter le résultat de la requête 'Where()' sur une ligne de la table à votre variable 'DataTable'. Le résultat de 'Where' est' IEnumerable' de lignes, pas une table elle-même. –

+0

@Pavel Minaev: Je ne peux donc pas utiliser l'extension Where() dans tableadapter.fill()? –

1

En C# une expression lambda est généralement utilisé comme la fonction. I.e. .:

tableAdapter.Fill(myDataSet.CUSTOMER.Where(c => c.LastName == "Smith")); 
+0

Ne fonctionne pas ... Une réponse similaire a déjà été affiché et supprimé –

+0

@Matthew Sposato: Je reçois l'erreur message: "Le type d'argument System.Data.EnumerableRowCollection n'est pas assignable au type de paramètre CUSTOMERDataTable". Des idées? –

+0

Fill prend un DataTable en paramètre. Où renvoie un EnumerableRowCollection , pas un DataTable. Quoi qu'il en soit, ce que vous essayez de faire n'a aucun sens du tout. Vous essayez de filtrer un DataTable vide de toute façon ... La méthode Where filtre le DataTable, PAS la requête faite par l'adaptateur de table! –