【发布时间】:2014-05-05 18:51:03
【问题描述】:
我正在尝试编写一个搜索例程,其中一部分包含以下代码:
string searchValue = Server.HtmlEncode(RadSearchBox.Text.ToLower());
var injurySearchList = (from i in injuryObj
where i.IsDeleted == false &&
(
i.ResultOther == true ? "ResultOther".ToLower().Contains(searchValue) : i.IncidentID.ToString().Contains(searchValue)
|| i.BodyPartHead == true ? "BodyPartHead".ToLower().Contains(searchValue) : i.IncidentID.ToString().Contains(searchValue)
)
select i.IncidentID).ToList();
由于我无法搜索字符串的位值,因此我使用三元运算符来评估它是否为真。如果是这样,我 [手动] 将字段名称转换为字符串,并查看其中是否包含搜索字符串。如果位值为假,我宁愿从 WHERE 子句中排除该行,但无法提出任何聪明的想法,因此我使用了将 IncidentID 字段转换为带有 Contains() 方法的字符串作为填充物。
以如下数据集为例:
+------------+-------------+--------------+-----------+
| IncidentID | ResultOther | BodyPartHead | IsDeleted |
+------------+-------------+--------------+-----------+
| 1 | 0 | 1 | 0 |
| 2 | 1 | 1 | 0 |
| 3 | 0 | 1 | 0 |
+------------+-------------+--------------+-----------+
问题是当 searchValue 等于“body”时,它只返回 IncidentID 1 和 3,但 2 也应该在其中。相反,如果 searchValue 等于“结果”,它只返回 IncidentID 2,如预期的那样。
有什么想法吗?
【问题讨论】: