C# Linq-子表上的where条件

C# Linq-子表上的where条件,c#,linq,C#,Linq,我们可以在下面的查询中对子表中的列应用where条件吗 患者是主表,我需要在下面的评估表中添加一列,如 Where(a => a.Date >= startdate && a.Date < stopdate && a.patient.assess.column1 == 10) 其中(a=>a.Date>=startdate和a.Date直流病人 .包括(“第一”) .选择(a=>新建 { 病人, 日期=a.assessment.Max(x=>x

我们可以在下面的查询中对子表中的列应用where条件吗

患者是主表,我需要在下面的评估表中添加一列,如

Where(a => a.Date >= startdate && a.Date < stopdate && a.patient.assess.column1 == 10)
其中(a=>a.Date>=startdate和a.Date

完整查询

  => dc.Patient
        .Include("first")
        .Select(a => new
        {
            Patient = a,
        Date = a.Assess.Max(x => x.Date),
        M3 = a.M3,
        Assess = a.Assess,
        Details = a.Assess
                    .Select(x => new
            {
                x.Key,
            x.Team
            })
        })
        .Where(a => a.Date >= startdate && a.Date < stopdate)
        .OrderBy(a => a.Date)
        .Take(batchSize)
        .ToList()
    );
=>直流病人
.包括(“第一”)
.选择(a=>新建
{
病人,
日期=a.assessment.Max(x=>x.Date),
M3=a.M3,
评估,评估,
细节=a.评估
.选择(x=>new
{
x、 钥匙,
x、 团队
})
})
其中(a=>a.Date>=startdate和a.Datea.Date)
.Take(批量大小)
托利斯先生()
);

您可以在lambda中使用附加的子/嵌入式lambda语句。在这种情况下,可以在Where语句中引用该语句。如果存在与lambda匹配的任何条件,则Any将返回
true
,可以称为
assessment
是一个集合

我的假设是:

  • assessment
    是一个强类型集合
  • 如果集合中的属性
    等于
    10
    的值,则希望
    Where
    子句中的任何属性匹配
    assessment
    实例
代码:

=>直流病人
.包括(“第一”)
.选择(a=>新建
{
病人,
日期=a.assessment.Max(x=>x.Date),
M3=a.M3,
评估,评估,
详细信息=a.assessment.选择(x=>new
{
x、 钥匙,
x、 团队
})
})
其中(a=>a.Date>=startdate和a.Dateass.column1==10))
.OrderBy(a=>a.Date)
.Take(批量大小)
托利斯先生()
);

您可以在lambda中使用附加的子/嵌入式lambda语句。在这种情况下,可以在Where语句中引用该语句。如果存在与lambda匹配的任何条件,则Any将返回
true
,可以称为
assessment
是一个集合

我的假设是:

  • assessment
    是一个强类型集合
  • 如果集合中的属性
    等于
    10
    的值,则希望
    Where
    子句中的任何属性匹配
    assessment
    实例
代码:

=>直流病人
.包括(“第一”)
.选择(a=>新建
{
病人,
日期=a.assessment.Max(x=>x.Date),
M3=a.M3,
评估,评估,
详细信息=a.assessment.选择(x=>new
{
x、 钥匙,
x、 团队
})
})
其中(a=>a.Date>=startdate和a.Dateass.column1==10))
.OrderBy(a=>a.Date)
.Take(批量大小)
托利斯先生()
);

这是一对多的关系吗?如果其中一个孩子的值为10,另一个孩子的值为20,该怎么办?是否要在查询中包含父项?如果只希望任何子项的值为10,可以使用以下条件:
a.assessment.any(x=>x.column1==10)
。关系是一对多吗?如果其中一个孩子的值为10,另一个孩子的值为20,该怎么办?是否要在查询中包含父项?如果只希望任何子项的值为10,可以使用以下条件:
a.assessment.any(x=>x.column1==10)
。谢谢Igor。“非常感谢!”正泰-很高兴它有所帮助。此外,如果您的问题有一个您认为是最好的答案或对您帮助最大的答案,请使用该答案旁边的复选标记将其标记为答案(然后该复选标记将变为绿色)。每个问题只能将1个答案标记为“正确”。谢谢Igor。“非常感谢!”正泰-很高兴它有所帮助。此外,如果您的问题有一个您认为是最好的答案或对您帮助最大的答案,请使用该答案旁边的复选标记将其标记为答案(然后该复选标记将变为绿色)。每个问题只能将1个答案标记为“正确”。
=> dc.Patient
    .Include("first")
    .Select(a => new
    {
        Patient = a,
        Date = a.Assess.Max(x => x.Date),
        M3 = a.M3,
        Assess = a.Assess,
        Details = a.Assess.Select(x => new
        {
            x.Key,
            x.Team
        })
    })
    .Where(a => a.Date >= startdate && a.Date < stopdate && a.Assess.Any(ass => ass.column1 == 10))
    .OrderBy(a => a.Date)
    .Take(batchSize)
    .ToList()
);