Как LINQPad ссылается на другие классы, например. Книги в примерах LINQ in Action

Я использую LINQPad для создания запросов LINQ в приложении, которое я создаю.

Я заметил, что в загруженных примерах LINQ in Action, например. пример 4.04, intellisense показывает класс «Книги», но я не вижу никаких ссылок или операторов «using» в инструменте LINQPad, вот пример:

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

В «LinqBooks.Common, Business Objects, Book.linq» класс, по-видимому, определен:

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

Но как это работает, чтобы я мог копировать в своих классах и использовать LINQPad для быстрого создания инструкций LINQ, которые я могу затем скопировать обратно в свое приложение?


person Edward Tanguay    schedule 03.08.2009    source источник


Ответы (4)


Если щелкнуть правой кнопкой мыши в редакторе кода в LINQPad и выбрать Дополнительные свойства запроса, появятся два диалоговых окна: Дополнительные ссылки и Импорт дополнительного пространства имен.

1) В разделе Дополнительные ссылки выберите Добавить, затем нажмите Обзор и перейдите к пользовательской сборке.

2) Затем в разделе Импорт дополнительных пространств имен введите пространства имен, которые вы хотите импортировать из этой сборки.

person Winston Smith    schedule 03.08.2009

LINQPad позволяет ссылаться на пользовательские сборки через диалоговое окно Расширенные свойства запроса, которое можно открыть, нажав F4.

person Andrew Hare    schedule 03.08.2009
comment
Поэтому я создал .dll с моими классами, которые я хочу запросить. Я нажимаю F4 и Добавить, но не вижу его в списке. Как мне сослаться на мою пользовательскую .dll? - person Edward Tanguay; 03.08.2009
comment
В том же диалоговом окне вам нужно использовать Дополнительный импорт пространств имен, чтобы включить эти пространства имен в область действия. - person Andrew Hare; 03.08.2009
comment
Но все, что у меня есть, это .dll, к которому я хочу получить доступ в LINQPad, например. C:\temp\SmartFormTest.dll, я копирую эту строку в *Additional Namespace Imports, но не могу сослаться на нее и не появляется в списке добавления. Как я могу ссылаться на C:\temp\SmartFormTest.dll? - person Edward Tanguay; 03.08.2009

На самом деле, если вы посмотрите на файл linq, такой как Book.linq, с помощью блокнота, вы увидите, что файл представляет собой смесь XML и фрагмента кода в конце:

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

Другими словами, вы можете найти более подробную информацию в файлах примеров linq о том, как LINQPad получает всю информацию, создает динамическую сборку и запускает ее внутри, чтобы вернуть результаты в свой пользовательский интерфейс.

Кстати, вчера вечером я написал в блоге об этом инструменте и своем понимании его структуры: LINQPad для .Net Snippet Code IDE.

person David.Chu.ca    schedule 18.09.2009
comment
Пример кодов xml и snip, мой пост выше, не из Book.linq. Вот лишь общий пример структуры xml и кодов. - person David.Chu.ca; 18.09.2009

Эдвард, при создании образцов LINQ in Action мы использовали ряд стратегий. В главах о базе данных мы часто просто полагались на способность LINQPad автоматически генерировать классы на основе таблиц базы данных.

В случае, когда вы ссылаетесь здесь (4.04), мы добавили ссылку на предварительно скомпилированную библиотеку классов, используя F4. Мы использовали эту стратегию в тех случаях, когда LinqPad генерировал классы, отличные от тех, которые генерировались Visual Studio, и, таким образом, вызывал поведение контекста, отличное от ожидаемого, особенно в отношении отслеживания изменений.

В других случаях мы добавляли вложенный класс, встроенный в остальную часть примера, и использовали параметр «Программа» в редакторе кода. См. пример 6.02. В этом случае мы фактически внедряем класс Books в сгенерированный класс DataContext, который генерирует LinqPad. Мы также использовали эту стратегию, когда хотели использовать псевдонимы для имен наших столбцов, потому что автоматически сгенерированные классы, которые создает LinqPad, не позволяют нам легко использовать псевдонимы для этих столбцов внутри инструмента.

В паре примеров, особенно там, где мы демонстрируем пользовательские методы расширения, нам пришлось проделать еще один трюк, заставив сгенерированный класс контекста завершиться (добавив явно несоответствующее окончание } или End Class), а затем запустить новый класс, но опуская его закрытие конечная скобка/конечный класс. Вы можете увидеть это в примере 2.16 в загруженных примерах.

person Jim Wooley    schedule 13.06.2011