无法成功将谓词放入外部谓词的子实体集合的Any()内

时间:2019-06-27 15:14:54

标签: c# predicatebuilder

我有一个称为Revisions的实体集合,每个实体都有许多RevisionNotesRevisionNote具有字符串值Note

在for循环中,我正在创建一个谓词,以应用于要进行多次搜索的修订版本集合,例如检查Revisions.Title是否包含某些文本,以及该修订版本具有包含某些文本的注释。

这是我遇到的一个较大问题的精简版,但是要点是我似乎找不到正确的方法将Note.Contains("search")添加到内部谓词中。

我尝试了Compile()Expand()的各种用法,但无济于事。

//model = System.Data.Entity.DbContext (EF6)
var revisions = model.Revisions.Where(r => r.ProjectId == projectId);
var filtersPredicate = PredicateBuilder.New<Revisions>(true);
foreach (var filterGroup in FieldFilters.GroupBy(f => new { f.Field, f.UdfId }))
{
    var filterGroupPredicate = PredicateBuilder.New<Revisions>();
    foreach (var filter in filterGroup)
    {
        switch (filterGroup.Key.Field)
        {
            case Field.Title:
                filterGroupPredicate.Or(r => r.Title.Contains(filter.Value));
                break;
            case Field.Notes:
                //this doesn't work
                var revisionNotePred = PredicateBuilder.New<RevisionNote>(n => n.Note.Contains(filter.Value));
                filterGroupPredicate.Or(r => r.RevisionNotes.Any(revisionNotePred));

                //this works
                //filterGroupPredicate.Or(r => r.RevisionNotes.Any(n => n.Note.Contains(filter.Value)));
                break;
        }
    }
    filtersPredicate = filtersPredicate.And(filterGroupPredicate);
}

return revisions.AsExpandable().Where(filtersPredicate);

例外:

  

System.InvalidOperationException:内部.NET Framework数据提供程序错误1025

0 个答案:

没有答案