在不破坏索引的情况下在linq2sql查询中修剪字段
我加入了2个不同表中的邮政编码,这些表包含大量数据并在邮政编码上进行索引。
如果我修剪掉t.zipplus4上的数字,这两个邮政编码字段只有5位数字,那么连接就可以工作。
不幸的是,使用子字符串或替换破坏了索引,因此查询花费的时间太长。
我显然不能使用trimstart? BC它不存在于SQL。
在sql left([Zip Code],5)对索引工作得很好。
linq有什么办法可以解决这个问题吗?在不破坏索引的情况下在linq2sql查询中修剪字段
例如:
var query = (from t in db.test
join g in db.test2 on t.zipplus4 equals g.zip
select t).ToList();
在不破坏索引的情况下,无法在linq中进行修剪。答案是沟通linq2sql为ado.net所以你得到所有的SQL功能。
为LEFT
最接近相当于在C#是一个String.Substring
方法,转化为TSQL的SUBSTRING
功能,是不是对你的选择。
如果您只是想修剪不必要的空格,请使用String.Trim
方法,它会被转换成类似LTRIM(RTRIM([t0].[zipplus4]))
的东西。
您可以尝试使用TSQL的LIKE
(它不是从问题清楚,如果LIKE
适合这里)通过使用SqlMethods.Like
:
var query = (from t in db.test
from g in db.test2
where SqlMethods.Like(t.zipplus4, g.zip + '%')
select t).ToList();
但我不知道这是否破坏了索引。
如果这一切都不适合您,请考虑为此创建a stored procedure。
我直接抛弃了linq。一个存储过程可以工作,但不是我想要的。 – 2013-02-16 18:59:13
您也可以将计算列添加到您的表(适当修剪)并将其索引。那么你的Linq查询将会很有效率。 – Phil 2013-02-16 19:10:15