我試圖寫一個搜索程序和它的一部分包括下面的代碼:LINQ Where子句行爲
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等於「體」,它只是返回IncidentID 1和3,但2應該在那裏。相反,如果searchValue等於「結果」,它只會按照預期返回IncidentID 2。
任何想法?
正確的答案,也是有用的,謝謝。 –
不客氣。順便說一句,你接受的答案不是第一(我不在乎你接受的只是確保你使用正確的標準)。 –
我剛纔說過每個名字上面都寫着「回答##分鐘前」。我在哪裏可以找到日期/時間戳? –