web-dev-qa-db-ja.com

LINQPadは他のクラスをどのように参照しますか(例: LINQ in Actionサンプルの書籍

LINQPadを使用して、作成中のアプリケーションでLINQクエリを作成しています。

ダウンロードしたLINQ in Actionサンプルで、たとえば例4.04、intellisenseはクラス「Books」を示していますが、LINQPadツールにreferencesまたは "sing"ステートメントが表示されません。サンプルは次のとおりです。

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ステートメントをすばやく構築し、アプリケーションにコピーできますか?

64
Edward Tanguay

LINQPadのコードエディターで右クリックして[クエリの詳細プロパティ]を選択すると、[追加の参照]と[追加の名前空間のインポート]の2つのダイアログが表示されます。

1)Additional ReferencesAddを選択してからBrowseをクリックし、カスタムアセンブリに移動します。

2)次に、Additional Namespace Importsに、そのアセンブリからインポートするnamespacesを入力します。

105
Winston Smith

LINQPadを使用すると、高度なクエリプロパティダイアログを使用してカスタムアセンブリを参照できます。 F4

10
Andrew Hare

実際、NotepadでBook.linqなどの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=...";
....

つまり、LINQPadがすべての情報を取得し、動的アセンブリを構築し、内部で実行して結果をUIに戻す方法について、linqファイルの例からより詳細な情報を見つけることができます。

ところで、私は昨夜このツールとその構造についての私のブログについてブログを書きました: LINQPad a .Net Snippet Code IDE

4
David.Chu.ca

エドワード、私たちはLINQ in Actionサンプルを作成するときに多くの戦略を使用しました。データベースの章では、多くの場合、データベーステーブルに基づいてクラスを自動生成するLINQPadの機能に依存していました。

ここで参照する場合(4.04)、F4を使用してプリコンパイル済みクラスライブラリに参照を追加しました。 LinqPadがVisual Studioによって生成されたクラスとは異なるクラスを生成し、その結果、特に変更の追跡に関して、コンテキストが予想と異なる動作をする場合にこの戦略を使用しました。

その他の場合、サンプルの残りの部分にネストされたクラスをインラインで追加し、コードエディターの[プログラム]オプションを使用しました。例6.02を参照してください。この場合、実際にはLinqPadが生成する生成されたDataContextクラス内にBooksクラスを埋め込みます。また、LinqPadが作成する自動生成クラスではツール内でこれらの列にエイリアスを簡単に作成できないため、列名をエイリアスする場合にもこの戦略を使用しました。

いくつかのサンプルでは、​​特にカスタム拡張メソッドをデモンストレーションする場合、生成されたコンテキストクラスを強制的に終了(親の不一致の終了}または終了クラスを追加)してから、新しいクラスを開始し、終了を省略する別のトリックを実行する必要がありました終了ブレース/終了クラス。ダウンロードされたサンプルの例2.16でこれを確認できます。

2
Jim Wooley