1

我目前有一个有效的多级谓词,如下所示......

var predicate = PredicateBuilder.New<Patient>();
foreach (var code in codeArray) // ect..["AB12", "W231", "Q213"]
{
    string localCode = code;
    predicate.Or(p => p.Requests.Any(
        u => u.Records.Any(
            t => t.OutgoingRecords.Any(
                s => s.Code == localCode)
            )
        )
    );
}

res = query.AsExpandable().Where(predicate); 
// Query is built up from an outside source and is eventually turned into a list via .ToListAsync()

这很好,除了据我所知它正在以...的形式生成查询

query =  p => p.PatientEpisodes.Any(u => u.EpisodeGroupings.Any(t => t.EpisodeDiagnoses.Any(s => s.Code == 'AB12'))) ||
              p.PatientEpisodes.Any(u => u.EpisodeGroupings.Any(t => t.EpisodeDiagnoses.Any(s => s.Code == 'W231'))) ||
              p.PatientEpisodes.Any(u => u.EpisodeGroupings.Any(t => t.EpisodeDiagnoses.Any(s => s.Code == 'Q213')))

当我真正应该制作的只是......

query =  p => p.PatientEpisodes.Any(u => u.EpisodeGroupings.Any(t => t.EpisodeDiagnoses.Any(s => s.Code == 'AB12' || s.Code == 'W312' || s.Code == 'Q213'))) 

有没有办法在查询的子级别插入谓词,如下所示?到目前为止,我目前的尝试都失败了。

var predicate = PredicateBuilder.New<RecordCode>();
foreach (var code in codeArray)
{
    string localCode = code;
    predicate.Or(p => p.Code == localCode);
}

query = query.AsExpandable().Where(
    s => s.Requests.Any(
        c => c.Records.Any(
            d => d.OutgoingRecords.Any(predicate))));

提前谢谢了。

4

0 回答 0