Rob*_*b C 6 c# linq entity-framework iqueryable
我正在尝试使用LINQ编写动态where子句,以返回包含字符串数组中提供的任何关键字的所有行.结果并没有像我预期的那样回到目前为止看到SQL我可以看到问题.
IQueryable<comments> query = _db.comments;
if (score != null)
query = query.Where(x => x.score == score);
if (dateFrom != null)3
query = query.Where(x => x.date_created >= dateFrom);
if (dateTo != null)
query = query.Where(x => x.date_created <= dateTo);
if (keywords != null)
{
//how to use OR for each in array?
foreach (var keyword in keywords)
{
var keywordCondition = keyword;
query = query.Where(x => x.text.Contains(keywordCondition));
}
}
WHERE ([Extent1].[score] = @p__linq__0)
AND ([Extent1].[date_created] >= @p__linq__1)
AND ([Extent1].[date_created] <= @p__linq__2)
AND ([Extent1].[text] LIKE @p__linq__3 ESCAPE '~')
AND ([Extent1].[text] LIKE @p__linq__4 ESCAPE '~')
Run Code Online (Sandbox Code Playgroud)
- 应该
WHERE ([Extent1].[score] = @p__linq__0)
AND ([Extent1].[date_created] >= @p__linq__1)
AND ([Extent1].[date_created] <= @p__linq__2)
AND (([Extent1].[text] LIKE @p__linq__3 ESCAPE '~')
OR ([Extent1].[text] LIKE @p__linq__4 ESCAPE '~'))
Run Code Online (Sandbox Code Playgroud)
我希望有人可以帮助我,因为我花了几个小时来寻找解决方案.
提前致谢
正如您所猜测的,这是您需要更改的问题部分,因为它将“AND”所有子句。
//how to use OR for each in array?
foreach (var keyword in keywords)
{
var keywordCondition = keyword;
query = query.Where(x => x.text.Contains(keywordCondition));
}
Run Code Online (Sandbox Code Playgroud)
我认为你可以通过将其更改为:
query = query.Where(x => keywords.Any(kw => x.text.Contains(kw));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5433 次 |
| 最近记录: |