C# 请帮助我为下面的SQL查询编写LINQ语句

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字段的平均精度。您不必费心编写这些类,我也不会为您这样做 显然,您有一系

名为MyDB的数据库有5个表:MSize、MModel、Met、MResult、SResult。它们的连接方式如下:

MSize与MModel有一个公共字段MSizeId

MModel链接与MModelId

Met可以在MId的基础上与MResult链接

同样,SResult可以与SResultId上的MResult链接


我的目标是获得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))),
      });