C# 请帮助我为下面的SQL查询编写LINQ语句
名为MyDB的数据库有5个表:MSize、MModel、Met、MResult、SResult。它们的连接方式如下: MSize与MModel有一个公共字段MSizeId MModel链接与MModelId Met可以在MId的基础上与MResult链接 同样,SResult可以与SResultId上的MResult链接C# 请帮助我为下面的SQL查询编写LINQ语句,c#,linq,C#,Linq,名为MyDB的数据库有5个表:MSize、MModel、Met、MResult、SResult。它们的连接方式如下: MSize与MModel有一个公共字段MSizeId MModel链接与MModelId Met可以在MId的基础上与MResult链接 同样,SResult可以与SResultId上的MResult链接 我的目标是获得Msize表中Accdecimal数据类型>=70且的所有itemsdescription字段的平均精度。您不必费心编写这些类,我也不会为您这样做 显然,您有一系
我的目标是获得Msize表中Accdecimal数据类型>=70且的所有itemsdescription字段的平均精度。您不必费心编写这些类,我也不会为您这样做 显然,您有一系列的Msize,其中每个Msize都有零个或多个MMODEL。每个MModel都有零个或多个Met,每个Met都有零个或多个MResult,每个MResult都有一个Acc 您还忘了用文字编写需求,现在我不得不从SQL查询中提取它 似乎您需要每个MSize的描述,以及它拥有的所有ACC的平均值,这些ACC的值介于70和130之间 如果使用实体框架,则可以使用虚拟ICollection,这使live变得相当简单。我将分两步完成,因为在下面,我不使用ICollection对GroupJoin执行相同的操作。第二部分对两种方法都是相同的 首先,我将获取每个MSize的描述,以及此MSize的MMODEL的MResults中的所有更深层次的Acc:
var descriptionsWithTheirAccs = dbContext.MSizes.Select(msize => new
{
Description = msize.Description,
// SelectMany the inner collections until you see the Accs
Accs = mSize.Mmodels.SelectMany(
// collection selector:
model => model.Mets,
// result selector: flatten MResults in the Mets
(model, mets) => mets
.SelectMany(met => met.MResults,
// result Selector: from every mResult take the Acc
(met, mResults) => mResults
.Select(mResult => mResult.Acc)));
现在我们已经有了每个MSize的描述,以及它内部的所有ACC,
我们可以扔掉所有我们不想要的ACC,并平均剩余的ACC:
var result= descriptionsWithTheirAccs.Select(descriptionWithItsAccs => new
{
Description = descriptionWithItsAccs.Description,
Average = descriptionWithItsAccs.Accs
.Where(acc => 70 <= acc && acc <= 130)
// and the average from all remaining Accs
.Avg(),
});
现在您已经有了RACC的描述,您可以使用上面的选择来计算平均值。请显示预期/实际结果如果我读对了,您是按布尔值分组的。m_size_group.Key是bool。因此,在最终选择之前,请使用m_size_group.Key的位置对其进行过滤。此外,请尝试在此处阅读您的想法,但mSize应该是m_size_group.Count。也许我的问题可以帮助您?您可以编辑您的问题,给我们相关的类及其关系;省去所有对查询不重要的连接,用文字写出让您发明SQL语句的需求:全部给我。。。从…起那个哪里
var descriptionsWithTheirAccs = dbContext.MSizes.Select(msize => new
{
Description = msize.Description,
// SelectMany the inner collections until you see the Accs
Accs = mSize.Mmodels.SelectMany(
// collection selector:
model => model.Mets,
// result selector: flatten MResults in the Mets
(model, mets) => mets
.SelectMany(met => met.MResults,
// result Selector: from every mResult take the Acc
(met, mResults) => mResults
.Select(mResult => mResult.Acc)));
var result= descriptionsWithTheirAccs.Select(descriptionWithItsAccs => new
{
Description = descriptionWithItsAccs.Description,
Average = descriptionWithItsAccs.Accs
.Where(acc => 70 <= acc && acc <= 130)
// and the average from all remaining Accs
.Avg(),
});
var descriptionsWithTheirAccs = dbContext.MSizes.GroupJoin(dbContext.MModels,
msize => msize.MSizeId,
mmodel => mmodel.MSizeId,
(msize, mmodels) => new
{
Description = msize.Description,
Accs = mmodels.GroupJoin(dbContext.Mets,
mmodel => mModel.MModelId,
met => met.MModelId,
(mmodel, metsofThisModel) => metsOfThisModel
.GroupJoin(dbContext.MResults,
met => met.MetId
mresult => mresult.MetId,
// result selector
(met, mresults) => mResult.Select(mresult => mresult.Acc))),
});