Подтвердить что ты не робот

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

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

Я заметил, что в загруженных образцах LINQ in Action, например. пример 4.04, intellisense показывает класс "Книги", но я не вижу никаких ссылок или с помощью "в инструменте 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" бизнес-объекты 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, которые затем можно скопировать обратно в мое приложение?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Собственно, если вы посмотрите на файл 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.

Ответ 4

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

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

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

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