C# 在linq to sql查询中将字符串转换为int:如何处理无法转换的值?
我正在对数据库运行此查询:C# 在linq to sql查询中将字符串转换为int:如何处理无法转换的值?,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我正在对数据库运行此查询: 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 demand
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)
as leads.GeolocDistanceRouteDistrib是一个VARCHAR,在某些情况下接受“未知”,导致:
此问题已解决,但无法将该方法转换为SQL
问题:有没有办法重写查询,以便在执行查询期间完成转换?使用中的技术在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
将.AsEnumerable()添加到实体中,然后可以使用所有方法
var result = (from leads in dc.T_DM_FactDemandeWebLeads.AsEnumerable()
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);
这似乎是一个好主意,但我仍然得到了错误:无论如何,转换被调用。
var result = (from leads in dc.T_DM_FactDemandeWebLeads.AsEnumerable()
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);