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

StackOverflow https://stackoverflow.com/questions/1222009

Вопрос

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

Я заметил, что в загруженных примерах LINQ в действии , например, В примере 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();

In " 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, которые затем можно копировать обратно в мое приложение?

Это было полезно?

Решение

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

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

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

Другие советы

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

На самом деле, если вы посмотрите на файл 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. IDE кода .Net Snippet .

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top