使用IQueryable创建动态查询

Bri*_*nha 5 c# sql linq iqueryable

我正在尝试遍历字符串数组并动态创建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));
}
Run Code Online (Sandbox Code Playgroud)

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

select * from QuestionsMetaDatas where Text Like "Test1" AND Text Like "Test2"
Run Code Online (Sandbox Code Playgroud)

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

小智 5

您是否尝试过包含其他方法?

var keywords=new List<int>(){ "Test1","Test2" };
query=query.Where(a=>keywords.Contains(a));
Run Code Online (Sandbox Code Playgroud)

这就像一个IN条款


Tom*_*nes 5

我使用了像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);
Run Code Online (Sandbox Code Playgroud)

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