实体框架PredicateBuilder多个“AND”&& “要么”

时间:2016-02-24 22:02:55

标签: sql entity-framework

我需要添加And&&或相同的查询

这是我的代码

        var predicate = PredicateBuilder.True<Summon>();
        if (!string.IsNullOrEmpty(param.id))
        {
            predicate = predicate.And(m => m.id== param.id);
        }
        if (!string.IsNullOrEmpty(param.subjects))
        {
            var subjectsPredicate = PredicateBuilder.False<Summon>();
            string[] subjects = param.subjects.Split(',');
            for (int i = 0; i < subjects.Length; i++)
            {
                subjectsPredicate = subjectsPredicate.Or(m => m.SubjectId ==subjects[i]);
            }
            predicate = predicate.And(subjectsPredicate);
        }

我的问题是,当主题存在时,我收到错误,所有其他查询都运行良好,只是这个“子查询”使查询失败。

这是我的错误,如果主题存在。 enter image description here

1 个答案:

答案 0 :(得分:0)

解决方案很简单 - 不在搜索查询上使用数组 subjects[i] - 不起作用

而不是写

for (int i = 0; i < subjects.Length; i++)
     {
        subjectsPredicate = subjectsPredicate.Or(m => m.SubjectId ==subjects[i]);
     }

Neet to write

 foreach (string key in subjects)
    {
      subjectsPredicate = subjectsPredicate.Or(m => m.SubjectId == key);
  }