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条款
我使用了像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查询。