Comment LINQPad référence-t-il d’autres classes, par exemple les livres dans les exemples LINQ in Action?

J’utilise LINQPad pour créer des requêtes LINQ dans une application.

J’ai remarqué que dans les échantillons LINQ in Action téléchargés, par exemple l’exemple 4.04, intellisense montre une classe “Books” mais je ne vois aucune référence ou instruction ” using ” dans l’outil LINQPad, voici l’exemple:

List books = new List() { new Book { Title="LINQ in Action" }, new Book { Title="LINQ for Fun" }, new Book { Title="Extreme LINQ" } }; var titles = books .Where(book => book.Title.Contains("Action")) .Select(book => book.Title); titles.Dump(); 

Dans “LinqBooks.Common, Business Objects, Book.linq ” est l’endroit où la classe semble être définie:

 public class Book { public IEnumerable Authors {get; set;} public Ssortingng Isbn {get; set;} public Ssortingng Notes {get; set;} public Int32 PageCount {get; set;} public Decimal Price {get; set;} public DateTime PublicationDate {get; set;} public Publisher Publisher {get; set;} public IEnumerable Reviews {get; set;} public Subject Subject {get; set;} public Ssortingng Summary {get; set;} public Ssortingng Title {get; set;} public Ssortingng Test {get; set;} public override Ssortingng ToSsortingng() { return Title; } } 

Mais comment cela fonctionne-t-il pour que je puisse copier dans mes classes et utiliser LINQPad pour construire rapidement des instructions LINQ que je peux ensuite copier dans mon application?

Si vous cliquez avec le bouton droit dans l’éditeur de code dans LINQPad et choisissez Propriétés avancées de la requête, il existe deux boîtes de dialog: Références supplémentaires et Importations d’espace de noms supplémentaires.

1) Dans Références supplémentaires , choisissez Ajouter puis cliquez sur Parcourir et accédez à votre assembly personnalisé.

2) Ensuite, dans Importations d’espace de noms supplémentaires , tapez les espaces de noms à importer à partir de cet assembly.

LINQPad vous permet de référencer des assemblys personnalisés via la boîte de dialog Propriétés avancées de la requête qui peut être ouverte en appuyant sur F4 .

En fait, si vous regardez le fichier linq tel que Book.linq avec notepad, vous verrez que le fichier est un mélange de XML et un extrait de code à la fin:

   ...  [path]\[library]  RuntimeDirectory>System.Data.dll  System.Data  MyLibrary.Common  var conn = "Data Source=..."; .... 

Dans les mots d’ordre, vous pouvez trouver des informations plus détaillées à partir d’exemples de fichiers linq sur la manière dont LINQPad extrait toutes les informations, construit un assemblage dynamic et l’exécute en interne pour obtenir des résultats dans son interface utilisateur.

Au fait, j’ai écrit un blog hier soir à propos de cet outil et de ma compréhension de sa structure: LINQPad, un IDE d’extraits de code .Net .

Edward, nous avons utilisé un certain nombre de stratégies lors de la construction des échantillons LINQ in Action. Dans les chapitres de la firebase database, nous nous appuyions souvent sur la capacité de LINQPad à générer automatiquement les classes en fonction des tables de la firebase database.

Dans le cas où vous faites référence ici (4.04), nous avons ajouté la référence à la bibliothèque de classes pré-compilée en utilisant F4. Nous avons utilisé cette stratégie dans les cas où LinqPad générait des classes différentes de celles générées par Visual Studio et provoquait donc un comportement différent du contexte, en particulier en ce qui concerne le suivi des modifications.

Dans d’autres cas, nous avons ajouté une classe nestede en ligne avec le rest de l’exemple et utilisé l’option “Program” dans l’éditeur de code. Voir exemple 6.02. Dans ce cas, nous intégrons actuellement la classe Books à l’intérieur de la classe DataContext générée générée par LinqPad. Nous avons également utilisé cette stratégie lorsque nous voulions alias les noms de nos colonnes car les classes générées automatiquement que crée LinqPad ne nous permettent pas de créer facilement des alias avec ces colonnes dans l’outil.

Dans quelques échantillons, en particulier lorsque nous démontrons des méthodes d’extension personnalisées, nous avons dû faire une autre astuce pour forcer la classe de contexte générée à terminer (en ajoutant une terminaison} ou une classe End), puis en démarrant une nouvelle classe. accolade / fin de classe. Vous pouvez voir ceci dans l’exemple 2.16 dans les exemples téléchargés.