25

私はLINQPadを使い始めたばかりで、これまでのところ気に入っていますが、LINQ TO SQLで出会ったほとんどのチュートリアルでは、更新などを永続化するためにVisual Studioによって生成されたDataContextクラスを利用しています.LINQ TO SQLもかなり新しいです。私の質問は、LINQPad で次のものに相当するものは何ですか (存在する場合)...

MyDbDataContext db = new MyDbDataContext();

...

db.SubmitChanges();
4

6 に答える 6

31

簡単な回答: DataContext を自分で作成する必要はありません。LINQPadにはたくさんのサンプルが付属しています。

LINQPad をデータベースに接続すると、DataContext が作成されます。DataContext のテーブル ( Table<T>)SubmitChanges()は、ローカル メンバーとして使用できます。

たとえば、LINQPad のデフォルトの「C# 式」モードでは、次のように記述できます。

from p in Person
where p.Name == "Joe"
select p.Address

LINQPad の「C# ステートメント」モード:

var query = from p in Person
            where p.Name == "Joe"
            select p.Address;

query.Dump(); // Dump() shows results below

Person joe = query.First();
joe.Name = "Peter";
SubmitChanges();

joe.Dump(); // shows joe's values under the previous query results

LINQPad のDump()拡張メソッドは非常に便利で、(LINQPad のステートメント モードで) 任意のオブジェクトまたはコレクションで呼び出して、以下の結果を表示できます。

LINQPad を使用するためにデータベースに接続する必要さえないことに注意してください。インメモリ コレクションを操作できます。

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();

実際、LINQPad を使用するために LINQ を使用する必要さえありません。また、スニペット コンパイラとしても優れた機能を発揮します。

于 2009-05-12T13:30:11.960 に答える
19

前に述べたように、LINQPad は既定で DataContext を作成するため、DataContext を作成する必要はありません。
ただし、念のため、使用できる2 つ目の DataContext (同じデータベース用) が必要です。

var secondDataContext = new UserQuery();

これにより、自動的に作成されたものと同じように、2 番目のデータコンテキストが作成されます。

于 2011-05-04T10:35:13.280 に答える
17

これにはすでに回答があることを知っており、ルーカスに同意しますが、この質問の読者に役立つ可能性のあるいくつかのことを追加したいと思いました.

必要に応じて、アセンブリから独自の DataContext を読み込むことができます。独自のコンテキストをロードするか、LinqPad に作成させるかに関係なく、LinqPad によって生成された「UserQuery」クラスのコンテキストで実行しています。

次の C# ステートメントは、これを示しています。

  this.GetType().Name.Dump();  // Shows UserQuery

この UserQuery クラスは DataContext から派生します。この例では、Linqpad に AdventureWorks データベースのデータ コンテキストを構築させます。

  this.GetType().BaseType.Dump();  // Shows TypedDataContext

MyDataContext という独自の DataContext をロードすると、次のようになります。

  this.GetType().BaseType.Dump();  // Shows MyDataContext
于 2009-07-24T16:33:10.743 に答える
10

jaraics からの返信に基づいて構築したところ、UserQuery コンストラクターには接続文字列が必要であることがわかりました。少なくとも LINQPad バージョン 4.37.11 ではそうです。したがって、LINQPad によって作成された UserQuery インスタンスから接続文字列を取得し、それを使用して独自のインスタンスを作成しました。

var connectionString = this.Connection.ConnectionString;
var secondDataContext = new UserQuery(connectionString);

上記のコードを使用すると、2 つ目の DataContext が得られました。

于 2012-03-05T13:53:28.207 に答える