Qu'est-ce que Système.Linq.Les Expressions en C#?
LINQ est une nouvelle fonctionnalité .NET 4.0, non pris en charge dans les versions plus anciennes, comme .NET 3.5? De quoi est-il utile? Il semble être en mesure de construire des Arbres d'Expression. Ce qui est une Expression de l'Arbre, en fait? Est LINQ en mesure d'extraire des informations telles que la classe, la méthode et le domaine à partir d'un fichier C#?
Quelqu'un peut-il me fournir un travail de morceau de code pour illustrer ce que LINQ peut faire?
étant donné que vous n'avez pas ajouté le linq tag je soupçonne que vous pourriez trouver à certains de linq questions stackoverflow.com/questions/tagged?tagnames=linq
Avez-vous vraiment de la recherche AFIN de linq avant de poster? Il y a des tonnes d'utiles discussions ici déjà, comme stackoverflow.com/questions/16322/all-about-linq et stackoverflow.com/questions/8050/beginners-guide-to-linq par exemple.
Comme LINQ est très nouveau pour moi, je ne sais pas par où commencer la lecture. @Tous ceux qui ont répondu: Merci à vous tous pour ur ans, je vais prendre le temps de lire la documentation pour voir si il est utile pour mon projet.
Avez-vous vraiment de la recherche AFIN de linq avant de poster? Il y a des tonnes d'utiles discussions ici déjà, comme stackoverflow.com/questions/16322/all-about-linq et stackoverflow.com/questions/8050/beginners-guide-to-linq par exemple.
Comme LINQ est très nouveau pour moi, je ne sais pas par où commencer la lecture. @Tous ceux qui ont répondu: Merci à vous tous pour ur ans, je vais prendre le temps de lire la documentation pour voir si il est utile pour mon projet.
OriginalL'auteur yeeen | 2009-09-15
Vous devez vous connecter pour publier un commentaire.
LINQ est un .NET 3.5 fonctionnalité avec construit dans le support de la langue à partir de C# 3.0 et Visual Basic 2008. Il y a beaucoup de des exemples sur le site MSDN.
System.Linq
espace de noms.System.Linq.Expressions
est une bête différente au total; voir @ShuggyCoUk la réponse ci-dessous.doit être un ingénieur ... 😉 reddit.com/r/Jokes/comments/28dae1/two_guys_are_in_a_helicopter
OriginalL'auteur Jeff Yates
Linq a été ajouté .Net 3.5 (et ajouté à la c# 3.0 compilateur ainsi que légèrement en forme limitée de la VB.net compilateur dans la même version)
Est intégré à une langue de la requête, bien qu'il couvre de nombreux complexes ajouts à la fois à la langue et à l'exécution afin d'obtenir ce qui sont utiles en eux-mêmes.
L'Expression de la fonctionnalité est tout simplement la capacité d'un programme, au moment de l'exécution, l'inspection de la syntaxe abstraite de certaines constructions de code de circuler. Ceux-ci sont appelés les lambdas. Et sont, pour l'essentiel, une manière d'écrire les fonctions anonymes de plus en plus facilement, tout en faisant d'exécution introspection de leur structure plus facile.
Le " SQL comme les fonctionnalités de Linq est le plus étroitement associé avec (mais pas la seule) est appelé Linq to Sql où par quelque chose comme ceci:
est compilé en une représentation de cette requête, plutôt que de simplement le code pour exécuter la requête. La partie qui le rend linq to sql est le "backend", qui le convertit en sql. Pour cela, l'expression est traduit en instructions sql server pour exécuter la requête sur une base de données couplée à la cartographie de lignes .net des objets et de la conversion du c# logique dans l'équivalent des clauses where. Vous pouvez appliquer exactement le même code si Foo est une collection de plaine .net des objets (à quel point il est "Linq to objects") la conversion de l'expression serait alors à droite .Net code.
Le lambda au-dessus de l'écrit dans la langue de manière intégrée est en fait l'équivalent de:
Foo.Où f => f.Bla == "wibble).Sélectionnez(f => f.Wobble);
Où Foo est tapé collection. Pour les classes de bases de données sont synthétisées de manière à représenter les valeurs dans la base de données pour permettre cette fois de la compilation, et pour permettre les allers-retours des valeurs à partir de sql domaines de l' .net domaines et vice versa.
L'aspect critique de la Intégré à une Langue partie de Linq, c'est que la résultante des constructions d'un langage de premier ordre sont les parties du code résultant. Plutôt que de simplement résultant en une fonction qu'ils fournissent le moyen de la fonction a été construite (comme une expression) ainsi que d'autres aspects du programme de la manipuler.
Les consommateurs de cette fonctionnalité peut tout simplement choisi de l'exécuter (execute la fonction dont le lambda est compilé) ou à demander de l'expression, qui le décrit et puis faire quelque chose de différent avec elle.
De nombreux aspects de ce qui rend cela possible est placé sous la "Linq" bannière en dépit de ne pas être vraiment Linq themsleves.
Par exemple, les types anonymes sont nécessaires pour faciliter l'utilisation de
projection
(choix d'un sous-ensemble de propriétés), mais les types anonymes peuvent être utilisés en dehors de Linq.Linq, notamment via les lambdas (qui font de l'écriture anonyme délégués très léger en termes de syntaxe) a conduit à une augmentation dans les capacités fonctionnelles de c#. ceci est renforcé par l'extension des méthodes sur
IEnumerable<T>
comme Select(), correspondant àmap
en fonction de nombreux langages et Où() correspondant àfilter
. Comme les types anonymes, ce n'est pas en elle-même "Linq" mais est considéré par beaucoup comme un fort effet bénéfique sur le développement c# (ce n'est pas une perspective universelle, mais est largement répandue).Expressions sont un sujet plus complexe, et la compréhension de leur est entièrement inutile à utilisation linq, même si certains trucs sont possibles à l'aide.
En général, vous voulez bien sur les Expressions que si vous essayez d'écrire des fournisseurs linq qui est le code pour prendre une expression plutôt que de simplement une fonction et l'utiliser pour faire autre chose que ce que la plaine de la fonction, comme parler à une source de données externe.
D'autres utilisations lorsque vous souhaitez obtenir des meta données sur ce que les internes de la fonction est en train de faire, peut-être alors la compilation de l'expression (résultant en un délégué qui vous permettra d'exécuter l'expression comme une fonction) et de faire quelque chose avec lui ou tout simplement en regardant les métadonnées des objets à ne réfléchissant code qui est de la compilation vérifié que cette réponse montre.
Je faisais allusion à ce qu'elle soit convertie en une requête sql en coulisses plutôt que de simplement la syntaxe. Je suis d'accord, il n'est#'t assez claire, donc je vais la modifier en conséquence.
OriginalL'auteur ShuggyCoUk
Une zone de cette question qui n'a pas été couvert encore, c'est l'expression d'arbres. Il y a un très bon article sur les arbres d'expression (et de l'expression lambda) disponible ici.
L'autre chose importante à apporter à propos des arbres d'expression, c'est que par la construction d'une arborescence d'expression pour définir ce que vous sont allez faire, vous n'avez pas à fait faire quoi que ce soit. Je me réfère à exécution différée.
OriginalL'auteur Ty.
LINQ a été introduit .NET 3.5. Ce site a beaucoup d'exemples.
OriginalL'auteur RaYell
C'est également couverte assez largement ici DONC.
OriginalL'auteur Dan Esparza
Système.Linq.Les Expressions de la main (ou à la machine à générer) des arbres d'expression. J'ai le sentiment que, compte tenu de la complexité de la construction plus compliquée que la fonctionnalité de cet espace de noms est sous-utilisée. Toutefois, il est extrêmement puissant. Par exemple, un de mes collègues de travail récemment mis en place une arborescence d'expression qui peuvent échelle automatique tout LINQ to SQL de l'objet à l'aide d'un cumultive fonction de densité. Chaque colonne possède son propre arbre qui sera compilé de manière rapide. J'ai été construction spécialisés compilateur qui utilise de façon intensive pour mettre en œuvre les fonctionnalités de base ainsi que de la colle le reste du code généré ensemble.
Veuillez voir ce blog pour plus d'informations et d'idées.
OriginalL'auteur Steve Severance
Ici est beaucoup de Linq-exemples:
http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx
OriginalL'auteur JayJay