2013-02-14 54 views
0

我加入了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

回答

0

在不破壞索引的情況下,無法在linq中進行修剪。答案是溝通linq2sql爲ado.net所以你得到所有的SQL功能。

1

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

相關問題