LINQPadは他のクラスをどのように参照しますか(例: LINQ in Actionサンプルの書籍
-
10-07-2019 - |
質問
私はLINQPadを使用して、作成中のアプリケーションでLINQクエリを作成しています。
ダウンロードした LINQ in Action サンプルでは、例4.04、intellisenseはクラス「Books」を示しています。しかし、参照も" 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();
&quot; LinqBooks.Common、Business Objects、 Book.linq &quot;クラスが定義されているようです:
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のコードエディターで右クリックし、[クエリの詳細プロパティ]を選択すると、[追加の参照]と[追加の名前空間のインポート]の2つのダイアログが表示されます。
1)[追加の参照]で[追加]を選択し、[参照]をクリックしてカスタムアセンブリに移動します。
2)次に、[ Additional Namespace Imports ]で、そのアセンブリからインポートする namespaces を入力します。
他のヒント
LINQPadでは、 F4 を押すと開くことができる Advanced Query Properties ダイアログを介してカスタムアセンブリを参照できます。
実際、メモ帳で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>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 .Net Snippet Code IDE 。
エドワードは、LINQ in Actionサンプルを構築する際にいくつかの戦略を使用しました。データベースの章では、データベーステーブルに基づいてクラスを自動生成するLINQPadの機能に依存することがよくありました。
ここで参照する場合(4.04)、F4を使用してプリコンパイル済みクラスライブラリに参照を追加しました。 LinqPadがVisual Studioによって生成されたクラスとは異なるクラスを生成したため、特に変更の追跡に関して、コンテキストが予想と異なる動作をする場合にこの戦略を使用しました。
他のケースでは、サンプルの残りの部分にネストされたクラスをインラインで追加し、「プログラム」を使用しました。コードエディタのオプション。例6.02を参照してください。この場合、実際にはLinqPadが生成する生成されたDataContextクラス内にBooksクラスを埋め込みます。また、LinqPadが作成する自動生成クラスではツール内でこれらの列にエイリアスを簡単に作成できないため、列名のエイリアスを作成する場合にもこの戦略を使用しました。
いくつかのサンプルで、特にカスタム拡張メソッドをデモンストレーションする場合、生成されたコンテキストクラスを強制的に終了させる(見かけ上一致しない終了}またはEndクラスを追加する)別のトリックを実行してから、新しいクラスを開始する必要がありましたが、終了エンドブレース/終了クラスを省略しています。これは、ダウンロードされたサンプルの例2.16で確認できます。