Ich versuche eine Linq-Abfrage zu schreiben, die Datensätze aus mehreren SQL-Tabellen sammelt. Die Tabellen und ihre Beziehungen sind im Bild unten angegeben. Beziehungen, die bereits durch Primär- und Fremdschlüssel in den Tabellen hergestellt wurden, sind mit schwarzen Linien gekennzeichnet. Rote Linien kennzeichnen Beziehungen, die nur für die Abfrage benötigt werden, um Datensätze auf die benötigten zu beschränken. Wie eine Tabelle mit zwei anderen Tabellen mit Linq in einer komplexen Abfrage zu verbinden?
Hier ist mein beste Versuch für die linq Abfrage, die jedoch mehr Datensätze gibt, wie ich erwartet habe (Kombinationen von nicht verwandten Datensätzen). ‚Analysiert‘ auf ‚Samples‘ und zu ‚Allowances‘
var query = from wastewater in db.WasteWaters
join allowance in db.Allowances on wasterwater.WasteWaterId equals allowance.WasteWaterId
join chemical in db.Chemicals on allowance.ChemicalId equals chemical.ChemicalId
join sample in db.Samples on wastewater.WasteWaterId equals sample.WasteWaterId
join analysissample in db.Analyses on sample.SampleId equals analysissample.SampleId
join analysisallowance in db.Analyses on allowance.ChemicalId equals analysisallowance.ChemicalId
select new QueryModel
{
WasteWaterName = wastewater.WasteWaterName,
SampleDescription = sample.SampleDescription,
Chemical = chemical.ChemicalName,
Result = analysis.AnalysisResult,
MaxAllowed = allowance.MaxAllowance
};
return query;
Ich glaube, der entscheidende Punkt in der Tabelle beitritt.
Wenn ich meine Datenbank mit SQL abfragen (was ich sicher tun werde), dann unterscheidet sich das Ergebnis vom Linq-Abfrageergebnis. Also muss etwas mit meiner linq-Abfrage nicht stimmen. Unterhalb der entsprechenden sql:
SELECT WasteWaters.WastewaterName, Samples.SmplDescription, Chemicals.ChemicalName, Allowances.MaxAllowance, Analyses.Result
FROM ((Chemicals INNER JOIN (WasteWaters INNER JOIN Allowances ON WasteWaters.WasteWaterId = Allowances.WasteWaterId)
ON Chemicals.ChemicalId = Allowances.ChemicalId) INNER JOIN Samples ON WasteWaters.WasteWaterId = Samples.WasteWaterId)
INNER JOIN Analyses ON (Analyses.ChemicalId = Allowances.ChemicalId) AND (Samples.SampleId = Analyses.SampleId);
Jede Hilfe mit diesem Problem wäre willkommen.
Ich würde nicht Linq zu SQL verwenden, da es ziemlich tot ist. Ich würde Entity Framework verwenden, wenn möglich. Dann können Sie die Tabellen navigieren und automatisch aus einer Vorlage erstellen. Ich bin mir nicht sicher, aber Linq zu Sql kann die Navigationselemente haben, da ich weiß, dass es einige Dinge gibt, die EF hat. Wo könnten Sie etwas Ähnliches wie YourObject.Include ("ChildObject.ChildChildObject") tun. Wählen Sie (x => new {(kombinierte Eigenschaften)}); Vielleicht nicht möglich, nur ein Vorschlag. https://msdn.microsoft.com/en-us/library/jj574232%28v=vs.113%29.aspx?f=255&MSPPError=-2147217396 – djangojazz