C# 使用PredicateBuilder搜索筛选器

C# 使用PredicateBuilder搜索筛选器,c#,asp.net-core,filter,predicatebuilder,C#,Asp.net Core,Filter,Predicatebuilder,我在搜索过滤器工作 我们选择一个学生(多个复选框)并获取其考试,有些考试可以有两个学生 对于一个学生,它是有效的,但当我选择多个学生时,我会得到一个异常LINQ表达式“DbSet” .Where(c=>True&&False | | | Invoke(r=>r.listofStudents.Select(c=>c.id)。包含(u broker_0),c[Exam]) &&False | | Invoke(r=>r.listofStudents.Select(c=>c.id)。包含(u stud

我在搜索过滤器工作 我们选择一个学生(多个复选框)并获取其考试,有些考试可以有两个学生 对于一个学生,它是有效的,但当我选择多个学生时,我会得到一个异常LINQ表达式“DbSet” .Where(c=>True&&False | | | Invoke(r=>r.listofStudents.Select(c=>c.id)。包含(u broker_0),c[Exam]) &&False | | Invoke(r=>r.listofStudents.Select(c=>c.id)。包含(u student_0),c[Exam]) ||调用(r=>r.listofStudents.Select(c=>c.id).Contains(uu student_u1),c[Exam]) )“无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算。有关更多信息,请参阅。 这是密码

var predicate = PredicateBuilder.True<Exam>();
  var predicate1 = PredicateBuilder.False<Exam>();
 if (students.Count < 2)
                {
                    predicate = predicate.And(r => r.listofStudents.Select(c => c.id).Contains(students.FirstOrDefault()));
                }
                else
                {
                        
                foreach (var student in students)
                {
                    predicate1 = predicate1.Or(r => r.listofStudents.Select(c => c.id).Contains(student ));
                    predicate = predicate.And(predicate1);
                }
                           
            }
 reqQuery = reqQuery.Where(predicate);
var predicate=PredicateBuilder.True();
var predicate1=PredicateBuilder.False();
if(students.Count<2)
{
predicate=predicate.And(r=>r.listofStudents.Select(c=>c.id).Contains(students.FirstOrDefault());
}
其他的
{
foreach(学生中的var学生)
{
predicate1=predicate1.Or(r=>r.listofStudents.Select(c=>c.id.Contains(student));
谓词=谓词和(谓词1);
}
}
reqQuery=reqQuery.Where(谓词);

谢谢

我找到了解决问题的办法

 var predicate = PredicateBuilder.True<Exam>();
  var predicate1 = PredicateBuilder.False<Exam>();
 if (students.Count < 2)
                {
                    predicate = predicate.And(r => r.listofStudents.Select(c => c.id).Contains(students.FirstOrDefault()));
                }
                else
                {
                        
                foreach (var student in students)
                {
                    predicate1 = predicate1.Or(r => r.listofStudents.Select(c => c.id).Contains(student ));
                }
                           
            }
 reqQuery = reqQuery.Where(predicate).Where(predicate1);
var predicate=PredicateBuilder.True();
var predicate1=PredicateBuilder.False();
if(students.Count<2)
{
predicate=predicate.And(r=>r.listofStudents.Select(c=>c.id).Contains(students.FirstOrDefault());
}
其他的
{
foreach(学生中的var学生)
{
predicate1=predicate1.Or(r=>r.listofStudents.Select(c=>c.id.Contains(student));
}
}
reqQuery=reqQuery.Where(谓词).Where(谓词1);

你能分享你的模型设计吗?它可以在我的项目中很好地工作。你的
学生名单和
学生名单和
reqQuery
是什么?还有,你的efcore和asp.net core版本是什么?