LinqKit核心 predicate 生成器未正确运行

x7rlezfr  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(138)

我有这样的疑问:

var query = LinqKit.PredicateBuilder.New<Resume>();
if (selectedWorkFieldID != 0)
{
   query = query.And(js => js.WorkFieldID == selectedWorkFieldID);
   if (!(selectedJobIDs.Contains(0) && selectedJobIDs.Count() == 1))
   {
       foreach (int jobID in selectedJobIDs)
          query = query.Or(js => js.JobID == jobID);
   }
}

var finalQuery = context.Resumes.AsNoTracking().Include(r => r.ResumeSkills)
    .ThenInclude(rs => rs.Skill).Include(r => r.JobSeeker).ThenInclude(r => r.Profile)
    .AsExpandable().Where(query);
count = finalQuery.Count();

resumes = finalQuery.Skip(args.Skip.Value).Take(args.Top.Value).ToList<Resume>();

此查询返回所有简历,而不是筛选的简历。当我调试时,调试器游标进入使用或筛选的foreach块,并且selectedJobID中有一个jobID,但查询返回所有简历。 predicate 生成器似乎根本不工作。如何解决此问题?

z3yyvxxp

z3yyvxxp1#

我将代码更改为:

if (selectedWorkFieldID != 0)
        {
            query = query.And(js => js.WorkFieldID == selectedWorkFieldID);
            if (!(selectedJobIDs.Contains(0) && selectedJobIDs.Count() == 1))
            {
                var query2 = LinqKit.PredicateBuilder.New<Resume>();
                foreach (int jobID in selectedJobIDs)
                    query2 = query2.Or(js => js.JobID == jobID);
                query.And(query2);
            }
        }

并对其进行校正。

相关问题