实体框架vb.net在翻译查询时出错

时间:2014-07-25 11:51:20

标签: sql vb.net entity-framework

我正在尝试转换此查询:

select sales.TTL_Sales_Net, sales.TTL_Sales_Target, units.TTL_Units_Net
from epos_Anal_Branch_Sales_Day sales 
join epos_PULL_PM_SKU_STATUS till on sales.BRANCH_ID = till.BRANCH_ID
join epos_Anal_Branch_Units_Day units on sales.BRANCH_ID = units.BRANCH_ID
where till.BRANCH_ID = 45 and sales.DATEKEY = 20140725 and units.DATEKEY = 20140725

从SQL到VB.net中的实体框架查询。我在我的函数中发送BRANCH_ID并生成如下所示的日期键:

 Dim MyDate As String = Date.Now.ToString("yyyyMMdd")

这就是我所拥有的,但它只是没有结果,我完全失去了原因!这是我到目前为止的查询,如果有人能够发现我做错了什么,那么我会很感激推进正确的方向

Public Class clsStoreSales
        Public Property DailyAmount As String
        Public Property DailyUnits As String
        Public Property SalesTarget As String
        Public Property ErrorMessages As String


        Public Shared Function GetStoreSales(ByVal BranchID As String) As List(Of clsStoreSales)

            Dim live As New RMISEntitiesLive
            Dim MyDate As String = Date.Now.ToString("yyyyMMdd")
            Dim l As New List(Of clsStoreSales)


            Try
                Dim r = From till In live.epos_PULL_PM_SKU_STATUS
                        Join sales In live.epos_Anal_Branch_Sales_Day On till.BRANCH_ID Equals sales.BRANCH_ID
                        Join units In live.epos_Anal_Branch_Units_Day On till.BRANCH_ID Equals units.DATEKEY
                        Where till.BRANCH_ID = CDbl(BranchID) AndAlso sales.DATEKEY = CDbl(MyDate) AndAlso units.DATEKEY = CDbl(MyDate)
                        Select New With {.SalesAmount = sales.TTL_Sales_Net, .SalesTarget = sales.TTL_Sales_Target, .SaleUnits = units.TTL_Units_Net}
                For Each t In r
                    Dim m As New clsStoreSales
                    m.DailyAmount = CStr(t.SalesAmount)
                    m.DailyUnits = CStr(t.SaleUnits)
                    m.SalesTarget = CStr(t.SalesTarget)
                    l.Add(m)
                Next

                Return l

            Catch ex As Exception
                Dim e As New clsStoreSales
                e.ErrorMessages = ex.ToString
                l.Add(e)
                Return l
            End Try
        End Function


    End Class

这是sqlServer Profiler在运行查询时显示的内容:

exec sp_executesql N'SELECT 
[Extent1].[BRANCH_ID] AS [BRANCH_ID], 
[Extent2].[TTL_Sales_Net] AS [TTL_Sales_Net], 
[Extent2].[TTL_Sales_Target] AS [TTL_Sales_Target], 
[Extent3].[TTL_Units_Net] AS [TTL_Units_Net]
FROM   [dbo].[epos_PULL_PM_SKU_STATUS] AS [Extent1]
INNER JOIN [dbo].[epos_Anal_Branch_Sales_Day] AS [Extent2] ON [Extent1].[BRANCH_ID] = [Extent2].[BRANCH_ID]
INNER JOIN [dbo].[epos_Anal_Branch_Units_Day] AS [Extent3] ON [Extent1].[BRANCH_ID] = [Extent3].[DATEKEY]
WHERE ( CAST( [Extent1].[BRANCH_ID] AS float) = @p__linq__0) AND ( CAST( [Extent2].[DATEKEY] AS float) = @p__linq__1) AND ( CAST( [Extent3].[DATEKEY] AS float) = @p__linq__2)',N'@p__linq__0 float,@p__linq__1 float,@p__linq__2 float',@p__linq__0=45,@p__linq__1=20140725,@p__linq__2=20140725

1 个答案:

答案 0 :(得分:1)

Join units In live.epos_Anal_Branch_Units_Day On till.BRANCH_ID Equals units.DATEKEY

应该是这个!

Join units In live.epos_Anal_Branch_Units_Day On till.BRANCH_ID Equals units.BRANCH_ID