web-dev-qa-db-fra.com

Comment LINQPad fait-il référence à d'autres classes, par exemple Livres dans les exemples LINQ in Action

J'utilise LINQPad pour créer des requêtes LINQ dans une application que je bulding.

J'ai remarqué que dans les exemples téléchargés LINQ in Action , par exemple exemple 4.04, intellisense montre une classe "Livres" mais je ne vois aucune référence ou " en utilisant "dans l'outil LINQPad, voici l'exemple:

List<Book> books = new List<Book>() {
  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<Author> Authors {get; set;}
  public String Isbn {get; set;}
  public String 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<Review> Reviews {get; set;}
  public Subject Subject {get; set;}
  public String Summary {get; set;}
  public String Title {get; set;}
  public String Test {get; set;}

  public override String ToString()
  {
    return Title;
  }
}

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

64
Edward Tanguay

Si vous cliquez avec le bouton droit dans l'éditeur de code dans LINQPad et choisissez Propriétés de requête avancées, il y a deux boîtes de dialogue: 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 assemblage personnalisé.

2) Ensuite, dans Importations d'espace de noms supplémentaires, saisissez espaces de noms que vous souhaitez importer à partir de cet assembly.

105
Winston Smith

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

10
Andrew Hare

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

<Query Kind="Statements"> <!-- kind: Program, ... --->
  <Connection>...</Connection> <!-- Optional, if you have connection to db -->
  <Reference>[path]\[library]</Reference> <!-- references to your customized libraries -->
  <Reference>RuntimeDirectory&gt;System.Data.dll</Reference> <!-- example to System.Data.dll -->
  <Namespace>System.Data</Namespace> <!-- here are nodes for namespaces... -->
  <Namespace>MyLibrary.Common</Namespace>
</Query>

var conn = "Data Source=...";
....

En d'autres termes, vous pouvez trouver des informations plus détaillées à partir d'exemples de fichiers linq sur la façon dont LINQPad extrait toutes les informations, crée un assembly dynamique et l'exécute en interne pour obtenir des résultats dans son interface utilisateur.

Au fait, j'ai écrit un blog hier soir sur cet outil et ma compréhension de sa structure: LINQPad a .Net Snippet Code IDE .

4
David.Chu.ca

Edward, nous avons utilisé un certain nombre de stratégies lors de la création des exemples LINQ in Action. Dans les chapitres de la base de données, nous nous sommes souvent appuyés sur la capacité de LINQPad à générer automatiquement les classes en fonction des tables de base de données.

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 a généré des classes différentes de celles générées par Visual Studio et a donc fait en sorte que le contexte se comporte différemment de ce que vous attendez, en particulier en ce qui concerne le suivi des modifications.

Dans d'autres cas, nous avons ajouté une classe imbriquée en ligne avec le reste de l'exemple et utilisé l'option "Programme" dans l'éditeur de code. Voir l'exemple 6.02. Dans ce cas, nous intégrons en fait la classe Books à l'intérieur de la classe DataContext générée que LinqPad génère. Nous avons également utilisé cette stratégie lorsque nous voulions alias nos noms de colonnes car les classes générées automatiquement que LinqPad crée ne nous permettent pas facilement d'alias ces colonnes à l'intérieur de l'outil.

Dans quelques exemples, en particulier lorsque nous 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 à se terminer (en ajoutant une fin apparemment inégalée} ou End Class), puis démarrer une nouvelle classe, mais en omettant sa fermeture accolade de fin/classe de fin. Vous pouvez le voir dans l'exemple 2.16 dans les exemples téléchargés.

2
Jim Wooley