में टेबल क्वेरी प्रदर्शन एक LINQ में, क्यों गुण विदेशी कुंजी से बनाए जाते हैं कर रहे हैं EntitySet
वस्तुओं, जो IEnumerable
, जहां के रूप में DataContext
पर वस्तुओं Table
वस्तुओं जो IQueryable
को लागू कर रहे हैं को लागू?EntitySet बनाम एसक्यूएल वर्ग के लिए LINQ2SQL
संपादित करें: स्पष्टीकरण के लिए, यहां एक उदाहरण है जो बताता है कि मैं क्या समझने की कोशिश कर रहा हूं।
ctx.MatchPlayers.Where(x => x.MatchID == 1)
.Max(x => x.Score);
केवल 1 क्वेरी चलाता है: यह उदाहरण: जहां के रूप में
ctx.Matches.Where(x => x.MatchID == 1).Single()
.MatchPlayers.Max(x => x.Score);
दो बार डेटाबेस पूरी करता है। यहाँ निशान हैं:
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
जो भी है कि, भी बदतर है, अधिकतम सी # स्तर पर करने के बजाय डेटाबेस में किया जाता है पता चलता है।
मुझे पता है कि कारण ऐसा होता है IQueryable
और IEnumerable
रों बीच का अंतर है, तो क्यों पहले उदाहरण में MatchPlayers
वस्तु IQueryable
इंटरफ़ेस को लागू नहीं करता है उत्तरार्द्ध उदाहरण के रूप में ही लाभ पाने के लिए।