Linq to Datarow, Sélectionnez plusieurs colonnes distinctes?
fondamentalement, je suis en train de reproduire le suivant mssql requête LINQ
SELECT DISTINCT [TABLENAME], [COLUMNNAME] FROM [DATATABLE]
le plus proche que j'ai est
Dim query = (From row As DataRow In ds.Tables("DATATABLE").Rows _
Select row("COLUMNNAME") ,row("TABLENAME").Distinct
quand je le fais ci-dessus, j'obtiens le message d'erreur
Plage de nom de variable peut être déduit
seulement à partir d'un simple ou qualifiée nom
sans arguments.
j'ai été en quelque sorte d'attendre le retour d'une collection que j'ai pu ensuite itérer et exécuter des actions pour chaque entrée.
peut-être un datarow collection?
Complet LINQ newb, je ne suis pas sûr de ce que je suis absent.
j'ai essayé de variations sur
Select new with { row("COLUMNNAME") ,row("TABLENAME")}
et obtenez:
Anonyme de type nom de membre peut être
déduit qu'à partir d'un simple ou
nom qualifié sans arguments.
pour contourner ce problème j'ai essayé
Dim query = From r In ds.Tables("DATATABLE").AsEnumerable _
Select New String(1) {r("TABLENAME"), r("COLUMNNAME")} Distinct
toutefois, il ne semble pas faire l'distinctes chose correctement.
Aussi, personne ne sait de toute bonne livres/ressources pour te mettre à l'aise?
OriginalL'auteur Beta033 | 2010-04-16
Vous devez vous connecter pour publier un commentaire.
Vous commencez à l'aide de LINQ sur vos objets datatable, vous exécutez la requête à l'encontre de dt.AsEnumberable, qui retourne un IEnumerable collection d'objets DataRow.
Vous voudrez peut-être dire
row("COLUMNNAME").ToString()
, etc. La requête sera à la fin d'un IEnumerable d'un type anonyme avec 2 propriétés de la chaîne; est-ce que vous êtes après? Vous pourrait besoin de spécifier les noms des propriétés; je ne pense pas que le compilateur déduit.Cela suppose que, dans l'original de votre requête sql, pour laquelle vous attendre pour obtenir ce jeu de données, vous avez fait en sorte que les résultats étaient distincts.
Cause fréquente de confusion:
Une clé est que Linq-to-SQL et (le Linq-to-objet activité communément appelé) LINQ-to-Dataset sont deux choses très différentes. Dans les deux, vous verrez LINQ être utilisé, il provoque souvent la confusion.
LINQ-to-Dataset
est:
1 pour votre datatable la même vieille façon, vous avez toujours, avec des adaptateurs de données et de connexions, etc., finir avec le traditionnel objet datatable. Et puis, au lieu d'une itération à travers les lignes que vous avez fait avant, vous êtes:
2 exécution des requêtes linq sur
dt.AsEnumerable
, qui est un IEnumerable d'objets datarow.Linq-to-ensemble de données est le choix de (UN) PAS utilisation de Linq-to-SQL, mais au lieu d'utiliser les ADO.NET mais alors (B) une fois que vous avez votre datatable, à l'aide de LINQ (à l'objet) pour récupérer/organiser/filtrer les données dans vos tables de données, plutôt que la façon dont nous l'avons fait pendant 6 ans. Je ne beaucoup de. J'aime mon ado sql (avec les outils que j'ai développé), mais LINQ est une grande
LINQ-to-SQL
est une bête différente, très différente des choses qui se passe sous le capot. Dans LINQ-to-SQL, vous:
1 définir un schéma qui correspond à votre base de données, en utilisant les outils dans Visual Studio, qui vous donne de simples objets de l'entité correspondant à votre schéma.
2 Vous écrire des requêtes linq à l'aide de la db Contexte, et d'obtenir ces entités retournées comme résultat.
Sous le capot, au moment de l'exécution .NET se traduit par ces requêtes LINQ to SQL et les envoie à la DB, puis traduit les données de retour à votre entité objets que vous avez définis dans votre schéma.
D'autres ressources:
Bien, c'est tout à fait tronquée résumé. Pour mieux comprendre ces deux choses distinctes, découvrez:
LINQ-to-SQL
LINQ-to-Dataset
Un livre fantastique sur LINQ est LINQ in Action, mon Fabrice Marguerie, Steve Eichert et Jim Wooley (Manning). Allez le chercher! Juste ce que vous êtes après. Très bon. LINQ n'est pas un flash dans la poêle, et vaut la peine d'obtenir un livre sur le sujet. Dans .NET il y a moyen de beaucoup à apprendre, mais le temps passé, maîtriser LINQ est du temps bien dépensé.
OriginalL'auteur Patrick Karcher
Je crois que j'ai compris.
Merci pour votre aide.
Peut-être il ya un moyen plus facile?
Ce que j'ai fait est
cela retourne un nouveau tableau de chaîne (2 éléments) d'exécution d'une coutume comparer
OriginalL'auteur Beta033
Découvrez le linq to sql échantillons:
http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx
Très utile pour apprendre le SQL. Et si vous voulez pratiquer ensuite utiliser LinqPad
HTH
OriginalL'auteur Raja
J'ai eu la même question, et à partir de divers éléments, je suis en train d'apprendre à propos de LINQ et IEnumerables, le suivant a fonctionné pour moi:
Étrangement à l'aide de l'ancien VB bang (!) la syntaxe de se débarrasser de la "Plage de nom de variable..." erreur MAIS la différence fondamentale est à l'aide de la
.Distinct
méthode sur le résultat de la requête (IEnumerable) objet plutôt que d'essayer d'utiliser laDistinct
mot-clé à l'intérieur de la requête.Cette requête LINQ puis retourne une collection IEnumerable de anonyme de type dont les propriétés correspondent les colonnes sélectionnées à partir de la DataRow, de sorte que le code suivant est alors accessible:
En espérant que cela aide quelqu'un d'autre de tomber sur cette question...
OriginalL'auteur bmadtiger