【发布时间】:2018-01-03 08:24:50
【问题描述】:
我正在尝试编写一个从多个 sql 表中收集记录的 linq 查询。下表及其关系如下图所示。 已经通过表中的主键和外键建立的关系用黑线表示。 红线指定仅查询所需的关系,以便将记录限制为所需的记录。
这是我对 linq 查询的最佳尝试,但它确实提供了我预期的更多记录(不相关记录的组合)。
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;
我认为关键点是将表格“分析”与“样本”和连接到“津贴”。
当我使用 sql 查询我的数据库时(我确信这样做是正确的),结果与 linq 查询结果不同。所以我的 linq 查询一定有问题。在相应的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);
任何有关此问题的帮助将不胜感激。
【问题讨论】:
-
我不会使用 Linq to SQL,因为它几乎已经死了。如果可能的话,我会使用实体框架。然后,您可以从模板导航和自动创建表格。我不确定,但 Linq to Sql 可能有导航成员,因为我知道它有一些 EF 有的东西。你可以在哪里做类似于 YourObject.Include("ChildObject.ChildChildObject").Select(x => new { (combined properties) });不可能,只是一个建议。 msdn.microsoft.com/en-us/library/…
标签: sql linq linq-to-sql