Pregunta

Estoy usando LINQPad para crear consultas LINQ en una aplicación que estoy usando.

Noté que en los ejemplos descargados de LINQ in Action , p. ejemplo 4.04, intellisense muestra una clase "Libros" pero no veo ninguna referencia o " usando " declaraciones en la herramienta LINQPad, aquí está el ejemplo:

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 definida:

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 esto para poder copiar en mis clases y usar LINQPad para crear rápidamente declaraciones de LINQ que luego pueda volver a copiar en mi aplicación?

¿Fue útil?

Solución

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

1) En Referencias adicionales , elija Agregar , luego haga clic en Examinar y navegue hasta su ensamblaje personalizado.

2) Luego, en Importaciones de espacio de nombres adicionales , escriba los espacios de nombres que desea importar desde ese ensamblaje.

Otros consejos

LINQPad le permite hacer referencia a ensamblajes personalizados a través del cuadro de diálogo Propiedades de consulta avanzadas que se puede abrir presionando F4 .

En realidad, si mira el archivo linq como Book.linq con el bloc de notas, verá que 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 palabras de orden, puede encontrar información más detallada de archivos linq de ejemplo sobre cómo LINQPad saca toda la información, crea un ensamblado dinámico y lo ejecuta internamente para obtener resultados de nuevo en su interfaz de usuario.

Por cierto, anoche escribí un blog sobre esta herramienta y mi comprensión de su estructura: LINQPad un IDE de código de fragmento de red. .

Edward, utilizamos una serie de estrategias al construir las muestras LINQ in Action. En los capítulos de la base de datos, a menudo confiamos en la capacidad de LINQPad para autogenerar las clases basadas en las tablas de la base de datos.

En el caso de que haga referencia aquí (4.04), agregamos la referencia a la biblioteca de clases precompilada usando F4. Utilizamos esta estrategia en los casos en que LinqPad generaba clases diferentes a las generadas por Visual Studio y, por lo tanto, hacía que el contexto se comportara de manera diferente de lo que cabría esperar, particularmente 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 el " Programa " opción en el editor de código. Ver ejemplo 6.02. En este caso, en realidad estamos incrustando la clase Books dentro de la clase DataContext generada que genera LinqPad. También utilizamos esta estrategia cuando queríamos asignar un alias a los nombres de nuestras columnas porque las clases autogeneradas que crea LinqPad no nos permiten alias esas columnas dentro de la herramienta.

En un par de muestras, particularmente cuando estamos demostrando métodos de extensión personalizados, tuvimos que hacer otro truco para obligar a la clase de contexto generada a terminar (agregando un final aparentemente incomparable} o End Class) y luego comenzar una nueva clase, pero omitiendo su cierre final llave / clase final. Puede ver esto en el ejemplo 2.16 en las muestras descargadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top