我正在尝试遍历字符串数组并动态创建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)); }
现在的问题是,当查询生成时,它会编译为
select * from QuestionsMetaDatas where Text Like "Test1" AND Text Like "Test2"
而不是AND我希望查询生成OR…现在如何实现呢?
AND
OR
我使用了像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查询。