EF4: LINQ 2 Entities query works in C# but not in VB

后端 未结 4 442
滥情空心
滥情空心 2021-02-03 13:53

[EDITED: I left the original question below, with some more context and code to reproduce the problem. The short version below contains the essence of the question]

Shor

相关标签:
4条回答
  • 2021-02-03 14:32

    hi this can be made to work quite easy...

    Instead of an IQueryable

    Dim orders As IQueryable(Of Order) = db.Orders

    use a List

    Dim orders as List(of Order) = db.Orders.ToList()
    
    0 讨论(0)
  • 2021-02-03 14:39

    Does this work?

        Dim a = From p In products Join o In orders On p.Id Equals o.ProductId
                Order By p.DateCreated
                Select New With {.id = p.Id, .OrderDate = o.OrderDate, .CustomerId = o.CustomerId, .DateCreated = p.DateCreated}
    
        Dim b = From outerOrder In orders _
                Where outerOrder.OrderDate = currentDate _
                AndAlso outerOrder.ProductId = _
                (From x In a Where x.OrderDate = outerOrder.OrderDate _
                 AndAlso x.CustomerId = outerOrder.CustomerId _
                 Select x.id).FirstOrDefault
    
    0 讨论(0)
  • 2021-02-03 14:51

    Moving the Order By p.DateCreated line as per my edited answer allows the query to run without any exceptions. However, the emitted SQL is different so I don't think you are getting back the correct result.

    Dim qLinq = From outerOrder In orders
                Let id = (From p In products 
                          Order By p.DateCreated
                          Join o In orders On p.Id Equals o.ProductId
                          Where o.OrderDate = outerOrder.OrderDate AndAlso
                                outerOrder.CustomerId = o.CustomerId
                          Select p.Id).FirstOrDefault()
                Where outerOrder.OrderDate = currentDate AndAlso
                      outerOrder.ProductId = id
                Select outerOrder
    
    0 讨论(0)
  • 2021-02-03 14:54

    I think the following works, the SQL is ugly though:

    Dim qLinq = From outerOrder In orders
                    Where outerOrder.OrderDate = currentDate AndAlso
                    outerOrder.ProductId =
                        (From x In (From p In products
                                     Join o In orders On p.Id Equals o.ProductId
                                     Where o.OrderDate = outerOrder.OrderDate AndAlso
                                            outerOrder.CustomerId = o.CustomerId
                                     Select p.Id)
                        Order By x).FirstOrDefault()
                    Select outerOrder
    
    0 讨论(0)
提交回复
热议问题