我有一个称为Revisions
的实体集合,每个实体都有许多RevisionNotes
。 RevisionNote
具有字符串值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