In che modo LINQPad fa riferimento ad altre classi, ad es. Libri negli esempi LINQ in Action

StackOverflow https://stackoverflow.com/questions/1222009

Domanda

Sto usando LINQPad per creare query LINQ in un'applicazione che sto sviluppando.

Ho notato che negli esempi LINQ in azione scaricati, ad es. esempio 4.04, intellisense mostra una classe "Libri" ma non vedo alcun riferimento o " utilizzando " istruzioni nello strumento LINQPad, ecco l'esempio:

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();

In " LinqBooks.Common, Business Objects, Book.linq " è dove la classe sembra essere definita:

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;
  }
}

Ma come funziona in modo da poterlo copiare nelle mie classi e utilizzare LINQPad per creare rapidamente istruzioni LINQ che posso quindi copiare nuovamente nella mia applicazione?

È stato utile?

Soluzione

Se fai clic con il pulsante destro del mouse nell'editor di codice in LINQPad e scegli Proprietà query avanzate, ci sono due finestre di dialogo: Riferimenti aggiuntivi e Importazioni di spazi dei nomi aggiuntivi.

1) In Riferimenti aggiuntivi , scegli Aggiungi quindi fai clic su Sfoglia e vai al tuo assemblaggio personalizzato.

2) Quindi, in Importazioni di spazi dei nomi aggiuntivi , digita gli spazi dei nomi che desideri importare da quell'assemblaggio.

Altri suggerimenti

LINQPad consente di fare riferimento a assembly personalizzati tramite la finestra di dialogo Proprietà query avanzate che può essere aperta premendo F4 .

In realtà, se guardi il file linq come Book.linq con il blocco note, vedrai che il file è un misto di XML e un frammento di codici alla fine:

<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=...";
....

In parole d'ordine, potresti trovare maggiori informazioni dettagliate da file linq di esempio su come LINQPad ottiene tutte le informazioni, costruisce un assembly dinamico ed esegue internamente per riportare i risultati alla sua interfaccia utente.

A proposito, ieri sera ho scritto un blog su questo strumento e la mia comprensione della sua struttura: LINQPad un IDE di codice frammento .Net .

Edward, abbiamo usato una serie di strategie durante la creazione di LINQ in esempi di azione. Nei capitoli del database, abbiamo spesso fatto affidamento sulla capacità di LINQPad di generare automaticamente le classi in base alle tabelle del database.

Nel caso in cui fai riferimento qui (4.04), abbiamo aggiunto il riferimento alla libreria di classi precompilata usando F4. Abbiamo utilizzato questa strategia nei casi in cui LinqPad ha generato classi diverse da quelle generate da Visual Studio e ha quindi comportato un comportamento del contesto diverso da quello che ti aspetteresti, in particolare per quanto riguarda il rilevamento delle modifiche.

In altri casi, abbiamo aggiunto una classe nidificata in linea con il resto del campione e utilizzato il "Programma" opzione nell'editor di codice. Vedi esempio 6.02. In questo caso, stiamo effettivamente incorporando la classe Books all'interno della classe DataContext generata che LinqPad genera. Abbiamo anche usato questa strategia quando volevamo alias i nomi delle nostre colonne perché le classi generate automaticamente che LinqPad crea non ci permettono facilmente di aliasare quelle colonne all'interno dello strumento.

In un paio di esempi, in particolare in cui stiamo dimostrando metodi di estensione personalizzati, abbiamo dovuto fare un altro trucco per forzare la fine della classe di contesto generata (aggiungendo un finale senza eguali} o End Class) e quindi iniziare una nuova classe, ma omettendo di chiudere la parentesi graffa / la classe finale. Puoi vederlo nell'esempio 2.16 negli esempi scaricati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top