3

我正在对数据库运行此查询:

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,它在某些情况下采用“未知”,导致格式异常

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

这个问题到这里就解决了,但是方法不能转换成SQL。

问题:有没有办法重写查询,以便在查询执行期间完成转换?

4

2 回答 2

2

使用此答案中的技术在您的 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
于 2013-05-27T12:42:37.303 回答
1

.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);
于 2018-04-05T05:58:41.077 回答