В с помощью LINQ к SQL класса, почему свойства, которые созданы из внешних ключей EntitySet
объектов, которые реализуют IEnumerable
, где, как объекты на DataContext
являются Table
объекты, которые реализуют IQueryable
?EntitySet против таблицы производительности запросов в LINQ2SQL
EDIT: Чтобы уточнить, вот пример, который иллюстрирует то, что я пытаюсь понять. Этот пример:
ctx.Matches.Where(x => x.MatchID == 1).Single()
.MatchPlayers.Max(x => x.Score);
попадает в базу данных в два раза, где, как:
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
с и IEnumerable
с, так почему не MatchPlayers
объекта в первом примере реализации интерфейса IQueryable
, чтобы получить то же преимущество, что и последний пример.