Vb.net 林奇;“不支持方法联接”;“放的时候就走了”;“可计算的”;

Vb.net 林奇;“不支持方法联接”;“放的时候就走了”;“可计算的”;,vb.net,wcf,linq,asenumerable,Vb.net,Wcf,Linq,Asenumerable,我有一个从数据实体查询数据的WCF。 我有点搞不懂,如果语法中没有放“aseneumerable”,为什么会抱怨“methodjoin不受支持”,而且有一种方法不使用aseneumerable。因为我读过一些文章提到它会在执行“where”条件之前放置所有数据 Dim ent As DataEnties.DPPromoterEntities Dim que = Nothing Dim sRet As String = "" Try

我有一个从数据实体查询数据的WCF。 我有点搞不懂,如果语法中没有放“aseneumerable”,为什么会抱怨“methodjoin不受支持”,而且有一种方法不使用aseneumerable。因为我读过一些文章提到它会在执行“where”条件之前放置所有数据

        Dim ent As DataEnties.DPPromoterEntities
        Dim que = Nothing
        Dim sRet As String = ""

        Try
            ent = New DataEnties.DPPromoterEntities(New Uri(AppSettings.Item("Data")))

            que = From CHS In ent.RC_CampaignHubSpokeTbl.AsEnumerable  '<--This line 
                  Join Cam In ent.RC_CampaignTbl.AsEnumerable On Cam.intCampaign Equals CHS.intCampaign'<--This line 
                  Where Cam.tintStatus.Equals(1)
                  Select New With {CHS.intCampaign,
                                   CHS.intCouponRefHub,
                                   CHS.intCouponRefSpoke,
                                   CHS.intHubRef,
                                   CHS.intSpokeRef}
            sRet = New JavaScriptSerializer().Serialize(que)

        Catch ex As Exception
            clsLog4Net.WriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name.ToString, ex.Message, True)
        End Try
Dim ent As DataEnties.dppromoterenties
Dim que=无
Dim sRet As String=“”
尝试
ent=新的DataEnties.dpPromoteEntities(新的Uri(AppSettings.Item(“数据”))

que=从ent.RC_activity hubspoketbl.AsEnumerable'
AsEnumerable
中的CHS强制执行
Join
语句到LINQ to对象。因此,来自
RC_-activityhubspoketbl
RC_-activitytbl
的所有数据都将取自WCF,然后在应用程序中合并在一起

这是必要的,因为WCF调用不支持联接

要稍微优化查询,可以执行以下操作:

que = From CHS In ent.RC_CampaignHubSpokeTbl.AsEnumerable()
      Join Cam In ent.RC_CampaignTbl.Where(Function(c) c.tintStatus.Equals(1)).AsEnumerable() On Cam.intCampaign Equals CHS.intCampaign
      Select New With {CHS.intCampaign,
                       CHS.intCouponRefHub,
                       CHS.intCouponRefSpoke,
                       CHS.intHubRef,
                       CHS.intSpokeRef}
进一步可能的优化-不确定
Contains()
在WCF调用中是否可用,因此您必须自己检查

Dim compains = ent.RC_CampaignTbl.Where(Function(c) c.tintStatus.Equals(1)).ToArray()
Dim HubSpokes = ent.RC_CampaignHubSpokeTbl.Where(Function(h) compains.Contains(h.intCampaign)).ToArray()

que = From CHS In compains 
      Join Cam In HubSpokes  On Cam.intCampaign Equals CHS.intCampaign
      Select New With {CHS.intCampaign,
                       CHS.intCouponRefHub,
                       CHS.intCouponRefSpoke,
                       CHS.intHubRef,
                       CHS.intSpokeRef}

这会减少返回线路的数量吗?对于上述代码,RC_-activityhubspoketbl仍然返回所有行,RC_-activitytbl将仅返回tintstatus=1?是,但仅从一个表返回。它将加载所有轮毂辐条,但只加载必要的轮毂辐条。好的。谢谢。六羟甲基三聚氰胺六甲醚。。。我认为如果数据增长,从长远来看,它会有性能问题。我发布了另一个版本,只需要下载必要的数据,但我不确定它是否有效。你得自己试试。谢谢。但不起作用。这是说“哪里”不能用这些论点来称呼。