0

我有一个从数据实体查询数据的 WCF。如果语法没有放入“AsEnumerable”,我有点困惑为什么它会抱怨“方法加入不支持”,并且它有一种不使用 AsEnumerable 的方法。因为我读过一些文章提到它会在执行“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
4

1 回答 1

0

AsEnumerable强制将Join语句执行到 LINQ to Objects 中。因此,所有来自 WCF 的数据RC_CampaignHubSpokeTbl以及RC_CampaignTbl将从 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}
于 2013-04-04T09:38:34.240 回答