【发布时间】:2015-07-01 18:37:30
【问题描述】:
我正在尝试使用 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 '~')
--应该是
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 '~'))
我希望有人可以帮助我,因为我已经花了几个小时寻找解决方案。
提前致谢
【问题讨论】:
-
有什么问题,是什么意思://如何对数组中的每个使用 OR?
-
您可能想看看规范模式en.wikipedia.org/wiki/Specification_pattern。该模式的简单实现可以在这里找到github.com/pmacn/Specific
标签: c# linq entity-framework iqueryable