64

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

ダウンロードしたLINQinActionサンプル(例4.04など)で、インテリセンスはクラス「Books」を示していますが、LINQPadツールに参照または「using 」ステートメントが表示されないことに気付きました。サンプルは次のとおりです。

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ステートメントをすばやく作成し、それをアプリケーションにコピーして戻すことができますか?

4

4 に答える 4

106

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

1) [追加の参照]で、[追加]を選択し、[参照]をクリックして、カスタムアセンブリに移動します。

2)次に、 [追加のネームスペースのインポート]に、そのアセンブリからインポートするネームスペースを入力します。

于 2009-08-03T12:36:19.937 に答える
10

LINQPad では、 を押して開くことができる [高度なクエリ プロパティF4] ダイアログからカスタム アセンブリを参照できます。

于 2009-08-03T12:24:33.460 に答える
4

実際、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

于 2009-09-18T14:26:37.817 に答える
2

Edward さん、LINQ in Action のサンプルを作成する際には、さまざまな方法を使用しました。データベースの章では、データベース テーブルに基づいてクラスを自動生成する LINQPad の機能に頼ることがよくありました。

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

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

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

于 2011-06-13T13:51:35.243 に答える