在不破坏索引的情况下在linq2sql查询中修剪字段

在不破坏索引的情况下在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(); 
+0

您也可以将计算列添加到您的表(适当修剪)并将其索引。那么你的Linq查询将会很有效率。 – Phil 2013-02-16 19:10:15

在不破坏索引的情况下,无法在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

+0

我直接抛弃了linq。一个存储过程可以工作,但不是我想要的。 – 2013-02-16 18:59:13