2009-08-03 7 views
59

Estoy usando LINQPad para crear consultas LINQ en una aplicación que estoy creando.¿Cómo LINQPad hace referencia a otras clases, p. Libros en las muestras de LINQ en Acción

me di cuenta de que en el descargado LINQ en Acción muestras, por ejemplo ejemplo 4.04, IntelliSense muestra una clase "Libros" pero no ven referencias o "utilizando" los datos contenidos en la herramienta LINQPad, aquí está la muestra:

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

En "LinqBooks.Common, Business Objects, Book.linq "es donde la clase parece estar definido:

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

Pero, ¿cómo funciona para que pueda copiar en mis clases y utilizar para construir rápidamente LINQPad declaraciones LINQ que puedo luego copia de nuevo en mi aplicación?

Respuesta

99

Si hace clic con el botón derecho en el editor de código en LINQPad y elige Propiedades de consulta avanzadas, hay dos cuadros de diálogo: Referencias adicionales e Importaciones de espacio de nombre adicionales.

1) En Referencias adicionales, elija Agregar continuación, haga clic en Examinar y vaya a su ensamblado personalizado.

2) Luego, en Las importaciones de espacios de nombres adicionales, escriba los espacios de nombres que desea importar de dicho montaje.

+0

era el botón "Buscar" que me faltaba, gracias! –

10

LINQPad permite hacer referencia a los ensamblados personalizados a través de las propiedades de consulta avanzadas de diálogo que se puede abrir pulsando F4 .

+0

Así que creé un .dll con mis clases en el que quiero consultar. Presioné F4 y ** Agregar ** pero no lo veo en la lista. ¿Cómo hago referencia a mi .dll personalizado? –

+0

En ese mismo cuadro de diálogo, necesita usar _Additional Namespace Imports_ para poner esos espacios de nombres dentro del alcance. –

+0

Pero todo lo que tengo es un .dll al que quiero acceder en LINQPad, p. "C: \ temp \ SmartFormTest.dll", copio esa línea en * Importaciones de espacio de nombre adicionales "pero no puedo hacer referencia a ella ni aparece en la lista Agregar. ¿Cómo puedo hacer referencia a ** C: \ temp \ SmartFormTest? .dll **? –

4

De hecho, si nos fijamos en el archivo de LINQ como Book.linq con el bloc de notas, verá el archivo es una mezcla de XML y un fragmento de códigos al final:

<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 otras palabras , puede encontrar información más detallada de ejemplos de archivos linq sobre cómo LINQPad obtiene toda la información, crea un ensamblaje dinámico y lo ejecuta internamente para obtener resultados de regreso a su UI.

Por cierto, anoche escribí un blog sobre esta herramienta y sobre mi comprensión de su estructura: LINQPad a .Net Snippet Code IDE.

+0

El ejemplo de los códigos xml y snip, mi publicación anterior, no es de Book.linq. Aquí hay solo un ejemplo genérico de la estructura de xml y códigos. –

2

Edward, utilizamos una serie de estrategias al compilar los ejemplos de LINQ en acción. En los capítulos de la base de datos, a menudo solo confiamos en la capacidad de LINQPad para autogenerar las clases basadas en las tablas de la base de datos.

En el caso que hace referencia aquí (4.04) hemos agregado la referencia a la biblioteca de clases precompilada usando F4. Utilizamos esta estrategia en los casos en que LinqPad generó clases diferentes a las generadas por Visual Studio y, por lo tanto, causó que el contexto se comportara de manera diferente a lo esperado, especialmente en lo que respecta al seguimiento de cambios.

En otros casos, agregamos una clase anidada en línea con el resto de la muestra y utilizamos la opción "Programa" en el editor de código. Ver ejemplo 6.02.En este caso, en realidad estamos insertando la clase Books dentro de la clase DataContext generada que genera LinqPad. También utilizamos esta estrategia cuando queríamos alias nuestros nombres de columna porque las clases generadas automáticamente que crea LinqPad no nos permiten alias fácilmente esas columnas dentro de la herramienta.

En un par de ejemplos, particularmente donde estamos demostrando métodos de extensión personalizados, tuvimos que hacer otro truco para forzar la clase de contexto generada para terminar (agregando un final aparentemente sin parangón} o clase final) y luego comenzar una nueva clase, pero omitiendo está cerrando la llave final/clase final. Puede ver esto en el ejemplo 2.16 en las muestras descargadas.

Cuestiones relacionadas