LINQ to SQL クラスでは、外部キーEntitySet
オブジェクトから作成されたプロパティが を実装しているのにIEnumerable
、 上のオブジェクトが を実装してDataContext
いるオブジェクトであるのはなぜですか?Table
IQueryable
編集:明確にするために、これは私が理解しようとしていることを示す例です。この例:
ctx.Matches.Where(x => x.MatchID == 1).Single()
.MatchPlayers.Max(x => x.Score);
データベースに 2 回ヒットします。
ctx.MatchPlayers.Where(x => x.MatchID == 1)
.Max(x => x.Score);
1 つのクエリのみを実行します。トレースは次のとおりです。
exec sp_executesql N'SELECT [t0].[MatchID], [t0].[Date]
FROM [dbo].[Matches] AS [t0]
WHERE [t0].[MatchID] = @p0',N'@p0 int',@p0=1
go
exec sp_executesql N'SELECT [t0].[MatchID], [t0].[PlayerID], [t0].[Score]
FROM [dbo].[MatchPlayers] AS [t0]
WHERE [t0].[MatchID] = @p0',N'@p0 int',@p0=1
go
と
exec sp_executesql N'SELECT MAX([t0].[Score]) AS [value]
FROM [dbo].[MatchPlayers] AS [t0]
WHERE [t0].[MatchID] = @p0',N'@p0 int',@p0=1
go
これは、さらに悪いことに、データベースではなく C# レベルで最大化が行われていることも示しています。
IQueryable
これが発生する理由はs とs の違いであることはわかっています。したがって、最初の例のオブジェクトは、後者の例と同じ利点を得るためにインターフェイスを実装IEnumerable
しないのはなぜですか。MatchPlayers
IQueryable