+-
c#-在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)

作为潜在客户.GeolocDistanceRouteDistrib是一个VARCHAR,在某些情况下会采用“未知”,导致format exception:

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

here解决了此问题,但是该方法无法转换为SQL.

问题:有什么方法可以重写查询,以便在执行查询期间完成转换?

最佳答案
使用 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
点击查看更多相关文章

转载注明原文:c#-在linq-to-sql查询中将字符串转换为int:如何处理无法转换的值? - 乐贴网