L'instruction linq suivante génère plusieurs déplacements dans la base de données. Y a-t-il un moyen de changer cela afin de le faire en un seul déplacement?Linq-to-sql génère une requête SQL unique avec distinct()
db.Members.Distinct().Select(
m => new {
Id = m.Id,
PlayTimeSchedules = m.PlayTimeSchedules.Select(pts => pts.DayOfWeek) }
).ToList();
FYI: dans cet exemple, Distinct est redondant.
Il y a un à plusieurs entre un membre et son PlayTimeSchedule
Je me attends quelque chose comme suit à générer:
select distinct(Members.Id), PlayTimeSchedule.DayOfWeek from Members
join PlayTimeSchedule on PlayTimeSchedule.MemberId = Members.Id
ou suis-je coincé avec la création d'une vue si je veux c'est fait en un voyage?
EDIT: Voici ce que ci-dessus LINQ génère (j'ai ajouté .Take (20) par souci de concision):
SELECT TOP (20) [t1].[Id]
FROM (
SELECT DISTINCT [t0].[Id], [t0].[EMail], [t0].[Username], [t0].[Password], [t0].[GmtOffset], [t0].[LastSeen], [t0].[Notifications], [t0].[EMailVer
ified], [t0].[ObserveDst], [t0].[Admin], [t0].[AttendedRaidCount], [t0].[MissedRaidCount], [t0].[LedRaidCount], [t0].[CommittedRaidCount]
FROM [dbo].[Members] AS [t0]
) AS [t1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT [t0].[DayOfWeek]
FROM [dbo].[PlayTimeSchedule] AS [t0]
WHERE [t0].[MemberId] = @x1
-- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
SELECT [t0].[DayOfWeek]
FROM [dbo].[PlayTimeSchedule] AS [t0]
WHERE [t0].[MemberId] = @x1
-- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
+++ 18 more DayOfWeek selections as above
Alors, qu'est-ce que * SQL * génère-t-il? –