Linq - 儿童桌上的条件

时间:2016-04-27 18:00:08

标签: c# linq

我们可以在下面的查询中的子表中的列上应用where where吗?

患者是主要表格,我需要在下面补充条件,其中包含评估表中的列,如

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

完整查询

  => 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()
    );

1 个答案:

答案 0 :(得分:3)

您可以在lambda中使用其他子/嵌入式lambda语句。在这种情况下,可以在Where语句中引用IEnumerable.Any语句。如果有任何条件与lambda匹配并且可以调用true是一个集合,则任何将返回Assess

我的假设是:

  • Assess是一个强类型集合
  • 如果集合中有Where个实例,其中属性Assess等于column 10子句匹配>

代码:

=> 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()
);