W jaki sposób LINQPad odwołuje się do innych klas, np. książek w LINQ in Action samples

Używam LINQPad do tworzenia zapytań LINQ w aplikacji, którą buduję.

Zauważyłem, że w pobranych przykładach LINQ in Action , np. przykład 4.04, intellisense pokazuje klasę "Books", ale nie widzę żadnych referencji lub" using " poleceń w narzędziu LINQPad, oto przykład:

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

W " LinqBooks.Common, Business Objects, Book.linq " jest gdzie Klasa wydaje się być zdefiniowana:

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

Ale jak to działa tak które mogę kopiować w moich klasach i używać LINQPad do szybkiego budowania instrukcji LINQ, które mogę następnie skopiować z powrotem do mojej aplikacji?

Author: Edward Tanguay, 2009-08-03

4 answers

Jeśli klikniesz prawym przyciskiem myszy w edytorze kodu w LINQPad i wybierzesz zaawansowane właściwości zapytań, pojawią się dwa okna dialogowe: dodatkowe referencje i dodatkowy Import przestrzeni nazw.

1) W dodatkowe referencje Wybierz Dodaj , a następnie kliknij Przeglądaj i przejdź do własnego zestawu.

2) Następnie, w dodatkowy Import przestrzeni nazw, Wpisz przestrzenie nazw, które chcesz zaimportować z tego zestawu.

 103
Author: Winston Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 13:08:57

LINQPad umożliwia odwoływanie się do niestandardowych zestawów za pomocą okna dialogowego Advanced Query Properties, które można otworzyć naciskając F4.

 10
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 12:24:33

Właściwie, jeśli spojrzysz na plik linq, taki jak Book.linq z notatnikiem, zobaczysz plik jest mieszanką XML i fragment kodu na końcu:

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

W słowach porządkowych możesz znaleźć więcej szczegółowych informacji z przykładowych plików linq o tym, jak LINQPad pobiera wszystkie informacje, buduje dynamiczny zespół i uruchamia go wewnętrznie, aby uzyskać wyniki z powrotem do interfejsu użytkownika.

Przy okazji, wczoraj napisałem bloga o tym narzędziu i moim zrozumieniu jego struktury: LINQPad a . Net Snippet Code IDE .

 4
Author: David.Chu.ca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 14:26:37

Edward, użyliśmy wielu strategii podczas budowania próbek LINQ in Action. W rozdziałach bazy danych często polegaliśmy na zdolności Linqpada do autogeneracji klas opartych na tabelach bazy danych.

W przypadku, gdy odwołujesz się tutaj (4.04) dodaliśmy odwołanie do wstępnie skompilowanej biblioteki klas przy użyciu F4. Wykorzystaliśmy tę strategię w przypadkach, gdy LinqPad generował klasy inne niż te generowane przez Visual Studio i tym samym powodował, że kontekst zachowywał się inaczej niż można się spodziewać, szczególnie w odniesieniu do śledzenia zmian.

W innych przypadkach dodaliśmy zagnieżdżoną klasę inline z resztą próbki i użyliśmy opcji "Program" w edytorze kodu. Patrz przykład 6.02. W tym przypadku umieszczamy klasę Books wewnątrz generowanej klasy DataContext, którą generuje LinqPad. Użyliśmy również tej strategii, gdy chcieliśmy aliasy naszych nazw kolumn, ponieważ automatycznie generowane klasy, które tworzy LinqPad nie pozwala nam aliasy tych kolumny wewnątrz narzędzia.

W kilku przykładach, szczególnie gdy demonstrujemy niestandardowe metody rozszerzeń, musieliśmy wykonać kolejną sztuczkę zmuszając generowaną klasę kontekstową do zakończenia (dodanie wyraźnie niezrównanego zakończenia } lub klasy End), a następnie rozpoczynając nową klasę, ale pomijając zamykanie nawiasów / klasy end. Można to zobaczyć w przykładzie 2.16 w pobranych próbkach.

 2
Author: Jim Wooley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 13:51:35