昨天我为此挠头一个小时,除了流汗,没有任何结果。
string SearchTag = "";
Extension.getDBService<MyClass>().FindAll(i => <true condition>);
正如我所期望的那样,这返回了我所有的MyClass DB记录。
string SearchTag = "";
Extension.getDBService<MyClass>().FindAll(i => <true condition> && i.TAG.ToLower().Trim().Contains(SearchTag.ToLower().Trim()));
这返回了一个0计数集合!!我不明白。
string SearchTag = "e";
Extension.getDBService<MyClass>().FindAll(i => <true condition> && i.TAG.ToLower().Trim().Contains(SearchTag.ToLower().Trim()));
这将再次返回一个包含所有MyClass DB记录的集合。这是正常的,因为i.TAG总是包含"e"。
为什么我要获得第二个表达式为0的成员集合?"string".Contains(")应该始终为true,对吗?
顺便说一句,扩展.getDBService()是对DBContext的调用。
谢谢你的帮助。
有趣的是,编写LINQ查询的方式会生成SQL CHARINDEX(...) > 0
条件,该条件对空字符串返回false。
但是,如果删除(移出查询)SearchTag
变量的ToLower().Trim()
部分
SearchTag = SearchTag.ToLower().Trim();
并使用
i.TAG.ToLower().Trim().Contains(SearchTag)
在LINQ查询中,则生成的SQL条件是LIKE
运算符,并按预期工作。
只是LINQ to Entity与LINQ to Objects不同的另一个例子。