我有一个场景,我在c#中有字符串值,在SQL服务器中,数据类型是十进制的,并且要求我必须像在字符串中那样过滤值,其中包括(startswith,endswith,contains等)过滤器。我这样想:
customers = customers.Where(x => Convert.ToString(x.CrmCustomerNumber).Contains(value));
但是它给了我错误,因为你无法在IQuerable中使用Convert.tostring。我知道我可以那样做
customers.ToList().Where(x => Convert.ToString(x.CrmCustomerNumber).Contains(value));
但在应用所有过滤器后,我在最后做Customer.ToList()。我的问题有什么解决办法吗?
答案 0 :(得分:1)
如果数字是已知大小,例如,如果它们都是六位数,那么您可以只查询一个值范围。
示例:我正在查找以123开头的所有六位数字。这与说&#34; WHERE Value BETWEEN 123000 AND 123999&#34;相同。因此,您可以查询.Where(x => x >= 123000 && x <= 123999)
。
如果数字不是一致的大小,但至少有一些实际限制,您可以将其扩展为.Where(x => x == 123 || (x >= 1230 && x <= 1239) || (x >= 12300 && x <= 12399) || (x >=123000 && x <= 123999)
。等
通过一点点数学,你可以使这个工作任何数字。 (x >= n * 10 && x <= ((n * 10) + 9))
EndsWith可以使用模数学来完成。 包含......好吧......你被桌面扫描困住了。在这种情况下,您可能会认真考虑向表中添加第二个(可能是计算的)列,一个存储与字符串相同的值,然后索引该列。然后,使用新列进行搜索。