ためのSQLを構成しません。以下の表:LinqToSql DataContextのは、私はセットアップに以下を確認するためのテスト・データベースおよびコンソールアプリを持っている機能
CREATE TABLE [dbo].[Test](
[PKey] [int] IDENTITY(1,1) NOT NULL,
[WFT] [uniqueidentifier] NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[PKey] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
スカラー値関数ufn_GTFOは、通常、構成可能であるように、次のC#:
static void InterfaceTest()
{
IDataClasses1DataContext db = new DataClasses1DataContext();
var q = from t in db.Tests
select new { t.PKey, GTFO = db.ufn_GTFO(t.WFT) };
var p = q.ToArray();
}
I:DataContextの上>エキスインターフェイス、およびそのインスタンスを使用する - 私はリファクタリングを使用している場合、
SELECT [t0].[PKey], [dbo].[ufn_GTFO]([t0].[WFT]) AS [GTFO] FROM [dbo].[Test] AS [t0]
しかし:
static void ConcreteTest()
{
DataClasses1DataContext db = new DataClasses1DataContext();
var q = from t in db.Tests
select new { t.PKey, GTFO = db.ufn_GTFO(t.WFT) };
var p = q.ToArray();
}
は、以下のSQLに変換され、次のSQLを取得し、ufn_GTFOの呼び出しは各レコードに対して1回発生します.ToArray()は結果を列挙します。
SELECT [t0].[PKey], [t0].[WFT] AS [guid]
FROM [dbo].[Test] AS [t0]
だから、私の質問は、なぜこれが起こらず、私はまだインターフェイスを使用している間、それを防ぐために何ができるのでしょうか?
アップデート1:私はILは、インターフェイスメソッドに対する具体的な方法のために発生した、と彼らはいずれかを持っていないようだインタフェースとコンパイラ生成した表示クラスへの参照のみが異なる比較しました結果に左右されます。
私はLINQの観点から分からないように私は、これに対する答えを投稿しないだろうが、私はそのSQLを知っていますかサーバは、最初のクエリで 'ufn_GTFO'をすべての行に対して一度だけ実行します。 – Eric
@eric - 正しいですが、ローカルで実行していますか行ごとに別の呼び出しを行うことは、パフォーマンスの観点とは大きく異なります。 –