2013-05-27 48 views
3

我針對數據庫運行此查詢:在linq-to-sql查詢中將字符串轉換爲int:如何處理無法轉換的值?

var result = (from leads in dc.T_DM_FactDemandeWebLeads 
         join demands in dc.T_DM_DimDemandeWebs on leads.DemandeWeb_FK equals demands.DemandeWeb_PK 
         join temps in dc.T_DM_Temps on demands.DateDemande_FK equals temps.Temps_PK 
         where leads.longitudeClient != null && (Convert.ToInt32(leads.GeolocDistanceRouteDistrib) > 1000*30) && (temps.Date > new DateTime(2000, 1, 1).Date) 
         select new Lead 
         { 

          lng = leads.longitudeClient,  

          lat = leads.latitudeClient, 

          distance = leads.GeolocDistanceRouteDistrib 

         }).Take(1000000); 

問題:此行是越野車:

(Convert.ToInt32(leads.GeolocDistanceRouteDistrib) > 1000*30) 

爲leads.GeolocDistanceRouteDistrib是VARCHAR這需要 「未知」,在某些情況下, ,導致format exception

Conversion failed when converting the varchar value 'Unknown' to data type int. 

這個問題解決here,但該方法無法轉換爲SQL。

問題:是否有任何方法來重寫查詢,以便在執行查詢期間完成轉換?

回答

2

使用在this answer的技術來創建你的dbml文件中則IsNumeric SQL函數。 並在您的查詢中使用它。

事情是這樣的:

join temps in dc.T_DM_Temps on demands.DateDemande_FK equals temps.Temps_PK 
where dc.ISNUMERIC(leads.GeolocDistanceRouteDistrib) // Added! 
where leads.longitudeClient != null && (Convert.ToInt32(leads.GeolocDistanceRouteDistrib) > 1000*30) && (temps.Date > new DateTime(2000, 1, 1).Date) 
select new Lead 
+0

似乎是一個好主意,但我仍然得到錯誤:不知何故轉換無論如何調用。 –