一尘不染

使用IQueryable创建动态查询

sql

我正在尝试遍历字符串数组并动态创建IQueryable查询。它非常简单,但是这就是我遇到的问题

var query = context.QuestionsMetaDatas.AsQueryable();

var keywords=new List<string>(){ "Test1","Test2" };

foreach(var key in keywords)
{
   query=query.Where(a=>a.Text.Contains(key));
}

现在的问题是,当查询生成时,它会编译为

select * from QuestionsMetaDatas where Text Like "Test1" AND Text Like "Test2"

而不是AND我希望查询生成OR…现在如何实现呢?


阅读 186

收藏
2021-05-23

共1个答案

一尘不染

我使用了像Raphael建议的谓词构建器,它只是项目中要包含的一个文件,因此您的示例变为:

var keywords=new List<string>(){ "Test1","Test2" };

var predicate = PredicateBuilder.False<QuestionsMetaDatas>();

foreach (var key in keywords)
{
  predicate = predicate.Or (a => a.Text.Contains (key));
}

var query = context.QuestionsMetaDatas.AsQueryable().Where(predicate);

生成您正在寻找的OR查询。

2021-05-23