Trong một LINQ to SQL lớp, tại sao các thuộc tính được tạo ra từ các phím nước ngoài EntitySet
đối tượng, mà thực hiện IEnumerable
, trong khi đó các đối tượng trên DataContext
là Table
đối tượng mà thực hiện IQueryable
?EntitySet vs hiệu suất truy vấn Table trong LINQ2SQL
EDIT: Để làm rõ, dưới đây là ví dụ minh họa những gì tôi đang cố gắng hiểu. Ví dụ này:
ctx.Matches.Where(x => x.MatchID == 1).Single()
.MatchPlayers.Max(x => x.Score);
lượt truy cập cơ sở dữ liệu hai lần nơi như:
ctx.MatchPlayers.Where(x => x.MatchID == 1)
.Max(x => x.Score);
chỉ chạy 1 truy vấn. Dưới đây là những dấu vết:
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
và
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ũng cho thấy rằng, thậm chí tệ hơn, tối đa được thực hiện ở mức độ # C hơn là trong cơ sở dữ liệu.
Tôi biết rằng lý do điều này xảy ra là sự khác biệt giữa IQueryable
s và IEnumerable
s, vậy tại sao không đối tượng MatchPlayers
trong ví dụ đầu tiên thực hiện các giao diện IQueryable
để có được những lợi ích tương tự như ví dụ sau.