Frage

Lets sagen, ich habe 3 Tabellen Beiträge, PostTags und Variablen eine many-to-many-Beziehung definieren. Ich mag eine Lookup-Tabelle erhalten, die mir gibt alle Beiträge zu einem bestimmten Tag im Zusammenhang damit ich den folgenden Code verwenden:

return dataContext.PostTags.ToLookup(pt => pt.Tag, pt => pt.Post);

In Unit-Test ging alles gut, aber in der realen Anwendung, es hat nicht funktioniert. Ich fand heraus, dass ich verschiedene Ladeoptionen zwischen meinem Gerät zu testen und meiner Anwendung hatte.

Wenn dataContext.DeferredLoadingEnabled = true;, alles ist in Ordnung und funktioniert wie erwartet, aber wenn dataContext.DeferredLoadingEnabled = false; und Sie haben nicht die Ladeoptionen von PostTags zu Post und Tag, die Lookup zurückgegeben enthält einen Schlüssel (null) mit einem leeren Array für Wert. Die generierte SQL ist

SELECT [t0].[PostID], [t0].[TagID]
FROM [dbo].[PostTags] AS [t0]

Also, wenn es die Lookup erzeugt, pt => pt.Post kehrt null und das gleiche gilt für die Stichworte.

Warum können die Linq2SQL Provider die richtige SQL in diesem Fall generieren?

Klarstellung . Mit der richtigen SQL jeder SQL, die sie die richtige Post und Tag-Objekte und erlaubt die Gruppierung korrekt zurückkehren

War es hilfreich?

Lösung

Ich fand einen Weg, um es funktioniert, egal, was der DeferredLoadingEnabled Eigenschaft Wert ist und was auch immer die Loadoptions sind:

var lookup = (from pt in dataContext.PostTags
              select new {pt.Post, pt.Tag}).ToLookup(x => x.Tag, x => x.Post);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top