将C#字符串与Sql Server十进制类型进行比较

时间:2017-05-02 11:38:10

标签: c# asp.net sql-server linq linq-to-entities

我有一个场景,我在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()。我的问题有什么解决办法吗?

1 个答案:

答案 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可以使用模数学来完成。 包含......好吧......你被桌面扫描困住了。在这种情况下,您可能会认真考虑向表中添加第二个(可能是计算的)列,一个存储与字符串相同的值,然后索引该列。然后,使用新列进行搜索。