Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. Why this query produce wrong results ?

Why this query produce wrong results ?

Scheduled Pinned Locked Moved Visual Basic
databasecsharpsql-serversysadmin
25 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D dilkonika

    Thank you ! But can you get me a suggestion how resolve the situation ? Is there any method to put those sum in the Calculated property ? Actually , I try to run like this :

    Dim dt1 as DateTime=CDate("08/08/2014")

    Dim list1 = (From t In context.MyObj Select New With { _
    .Parent = t, _
    .chl = (From t2 In t.chld.AsQueryable.Where(Function(t3) t3.Date1>=dt1) Select t2)
    .sum1 =(From t2 in t.chld.AsQueryable.Where(Function(t2) t2.date1<dt1).Select(Function(t3) t3.quantity).DefaultIfEmpty
    }).ToList

    and after :

    For Each l In list1
    l.Parent.vls=l.sum1
    Next

    But this is executed very slow. Is there any better method ? Thank you !

    D Offline
    D Offline
    Dave Kreskowiak
    wrote on last edited by
    #8

    I already told you what to do. I gave you a link that shows you how to do it. I've even told you why your code doesn't work.

    Dim list1 = (From t in context.MyObject**_.Include("chld")_** Select New ...
    

    A guide to posting questions on CodeProject

    Click this: Asking questions is a skill. Seriously, do it.
    Dave Kreskowiak

    D 1 Reply Last reply
    0
    • D Dave Kreskowiak

      I already told you what to do. I gave you a link that shows you how to do it. I've even told you why your code doesn't work.

      Dim list1 = (From t in context.MyObject**_.Include("chld")_** Select New ...
      

      A guide to posting questions on CodeProject

      Click this: Asking questions is a skill. Seriously, do it.
      Dave Kreskowiak

      D Offline
      D Offline
      dilkonika
      wrote on last edited by
      #9

      Yes , but I think you don't understand that I don't want to include all the childs. For the childs with date before 08/08/2014 I want to get only the quantity's sum. The childs with date after 08/08/2014 I want to include. The code that I write in my last post , do what I want , but the part " From each...... run very slow. Do you know a better solution ?

      D 1 Reply Last reply
      0
      • D dilkonika

        Yes , but I think you don't understand that I don't want to include all the childs. For the childs with date before 08/08/2014 I want to get only the quantity's sum. The childs with date after 08/08/2014 I want to include. The code that I write in my last post , do what I want , but the part " From each...... run very slow. Do you know a better solution ?

        D Offline
        D Offline
        Dave Kreskowiak
        wrote on last edited by
        #10

        You have a choice. You can either 1) The slow way. Do the calculation in your property getter where you have to wait for EF to re-hydrate all the related child objects into memory and then your getter code applies its filter and does the calculation. Or 2) You drop the property getter code and move the filtering to the query and let the database filter the child objects and do the math for you. Something the database engine was designed to do very well. The choice is up to you.

        A guide to posting questions on CodeProject

        Click this: Asking questions is a skill. Seriously, do it.
        Dave Kreskowiak

        D 1 Reply Last reply
        0
        • D Dave Kreskowiak

          You have a choice. You can either 1) The slow way. Do the calculation in your property getter where you have to wait for EF to re-hydrate all the related child objects into memory and then your getter code applies its filter and does the calculation. Or 2) You drop the property getter code and move the filtering to the query and let the database filter the child objects and do the math for you. Something the database engine was designed to do very well. The choice is up to you.

          A guide to posting questions on CodeProject

          Click this: Asking questions is a skill. Seriously, do it.
          Dave Kreskowiak

          D Offline
          D Offline
          dilkonika
          wrote on last edited by
          #11

          Thank you !. The problem is that for some reasons I need to have the sum values in a Myobj's property. Do you think that is possible that I can realize your second variant with my above condition ? Thank you !

          D 1 Reply Last reply
          0
          • D dilkonika

            Thank you !. The problem is that for some reasons I need to have the sum values in a Myobj's property. Do you think that is possible that I can realize your second variant with my above condition ? Thank you !

            D Offline
            D Offline
            Dave Kreskowiak
            wrote on last edited by
            #12

            Ho many minutes would it take you to TRY IT?

            A guide to posting questions on CodeProject

            Click this: Asking questions is a skill. Seriously, do it.
            Dave Kreskowiak

            D 1 Reply Last reply
            0
            • D Dave Kreskowiak

              Ho many minutes would it take you to TRY IT?

              A guide to posting questions on CodeProject

              Click this: Asking questions is a skill. Seriously, do it.
              Dave Kreskowiak

              D Offline
              D Offline
              dilkonika
              wrote on last edited by
              #13

              the problem is I don't know how ? Could you explain how can I do ?

              D 1 Reply Last reply
              0
              • D dilkonika

                the problem is I don't know how ? Could you explain how can I do ?

                D Offline
                D Offline
                Dave Kreskowiak
                wrote on last edited by
                #14

                I ALREADY HAVE! MULTIPLE TIMES! Go back and re-read these posts!

                A guide to posting questions on CodeProject

                Click this: Asking questions is a skill. Seriously, do it.
                Dave Kreskowiak

                D 1 Reply Last reply
                0
                • D Dave Kreskowiak

                  I ALREADY HAVE! MULTIPLE TIMES! Go back and re-read these posts!

                  A guide to posting questions on CodeProject

                  Click this: Asking questions is a skill. Seriously, do it.
                  Dave Kreskowiak

                  D Offline
                  D Offline
                  dilkonika
                  wrote on last edited by
                  #15

                  Quote:

                  You have a choice. You can either 1) The slow way. Do the calculation in your property getter where you have to wait for EF to re-hydrate all the related child objects into memory and then your getter code applies its filter and does the calculation. Or 2) You drop the property getter code and move the filtering to the query and let the database filter the child objects and do the math for you. Something the database engine was designed to do very well.

                  Can you explain how to do the second ?

                  D 1 Reply Last reply
                  0
                  • D dilkonika

                    Quote:

                    You have a choice. You can either 1) The slow way. Do the calculation in your property getter where you have to wait for EF to re-hydrate all the related child objects into memory and then your getter code applies its filter and does the calculation. Or 2) You drop the property getter code and move the filtering to the query and let the database filter the child objects and do the math for you. Something the database engine was designed to do very well.

                    Can you explain how to do the second ?

                    D Offline
                    D Offline
                    Dave Kreskowiak
                    wrote on last edited by
                    #16

                    No, because YOU already did it --> http://www.codeproject.com/Messages/5006723/Re-Why-this-query-produce-wrong-results.aspx[^]

                    A guide to posting questions on CodeProject

                    Click this: Asking questions is a skill. Seriously, do it.
                    Dave Kreskowiak

                    D 1 Reply Last reply
                    0
                    • D Dave Kreskowiak

                      No, because YOU already did it --> http://www.codeproject.com/Messages/5006723/Re-Why-this-query-produce-wrong-results.aspx[^]

                      A guide to posting questions on CodeProject

                      Click this: Asking questions is a skill. Seriously, do it.
                      Dave Kreskowiak

                      D Offline
                      D Offline
                      dilkonika
                      wrote on last edited by
                      #17

                      yes , but after these instructions , I need to put those sums in the .vls . and to do this I know only this way :

                      For Each l In list1
                      l.Parent.vls=l.sum1
                      Next

                      But as I wrote in one of my previous messages this is too slow

                      D 1 Reply Last reply
                      0
                      • D dilkonika

                        yes , but after these instructions , I need to put those sums in the .vls . and to do this I know only this way :

                        For Each l In list1
                        l.Parent.vls=l.sum1
                        Next

                        But as I wrote in one of my previous messages this is too slow

                        D Offline
                        D Offline
                        Dave Kreskowiak
                        wrote on last edited by
                        #18

                        I told you you can't do what you want to do and get the speed out of it. It just isn't possible.

                        A guide to posting questions on CodeProject

                        Click this: Asking questions is a skill. Seriously, do it.
                        Dave Kreskowiak

                        D 1 Reply Last reply
                        0
                        • D Dave Kreskowiak

                          I told you you can't do what you want to do and get the speed out of it. It just isn't possible.

                          A guide to posting questions on CodeProject

                          Click this: Asking questions is a skill. Seriously, do it.
                          Dave Kreskowiak

                          D Offline
                          D Offline
                          dilkonika
                          wrote on last edited by
                          #19

                          Quote:

                          You have a choice. You can either 1) The slow way. Do the calculation in your property getter where you have to wait for EF to re-hydrate all the related child objects into memory and then your getter code applies its filter and does the calculation. Or 2) You drop the property getter code and move the filtering to the query and let the database filter the child objects and do the math for you. Something the database engine was designed to do very well. The choice is up to you.

                          Yes but you call the first way as "slow way" an not the second. Why the second is slow ?

                          D 1 Reply Last reply
                          0
                          • D dilkonika

                            Quote:

                            You have a choice. You can either 1) The slow way. Do the calculation in your property getter where you have to wait for EF to re-hydrate all the related child objects into memory and then your getter code applies its filter and does the calculation. Or 2) You drop the property getter code and move the filtering to the query and let the database filter the child objects and do the math for you. Something the database engine was designed to do very well. The choice is up to you.

                            Yes but you call the first way as "slow way" an not the second. Why the second is slow ?

                            D Offline
                            D Offline
                            Dave Kreskowiak
                            wrote on last edited by
                            #20

                            Dude. I don't have your database. I don't know what your overall objective is. I don't know what you're reasons are for anything and you've put up so many code snippets, I have no idea what you're referring to or what you're referring to when you say "slow". Without that stuff, I'm at a severe disadvantage in diagnosing your problems. YOU have to understand how EF works and you're not going to get that information from a few forum posts. I already told you, pick up a book on EF and Code First and work through them. I've already told you why your queries are returning 0's for values, but you don't seems to get it and you don't seem to understand the limitations of your design or of EF.

                            A guide to posting questions on CodeProject

                            Click this: Asking questions is a skill. Seriously, do it.
                            Dave Kreskowiak

                            D 1 Reply Last reply
                            0
                            • D Dave Kreskowiak

                              Dude. I don't have your database. I don't know what your overall objective is. I don't know what you're reasons are for anything and you've put up so many code snippets, I have no idea what you're referring to or what you're referring to when you say "slow". Without that stuff, I'm at a severe disadvantage in diagnosing your problems. YOU have to understand how EF works and you're not going to get that information from a few forum posts. I already told you, pick up a book on EF and Code First and work through them. I've already told you why your queries are returning 0's for values, but you don't seems to get it and you don't seem to understand the limitations of your design or of EF.

                              A guide to posting questions on CodeProject

                              Click this: Asking questions is a skill. Seriously, do it.
                              Dave Kreskowiak

                              D Offline
                              D Offline
                              dilkonika
                              wrote on last edited by
                              #21

                              Hello Friend ! ( not dude ! ) You don't have my database , but you have my EF model from my first post. And as you have a lot's of experience , you can imagine how the database is. Anyway , my last question was not for database , but for a simple In memory For.. each loop that run slow. And I think it's not good to tell a someone " You have asked about this , ok take these books and read" . Then why this forum is still open , replace your webpage with a big poster : You that have problems with Entity ------ Read this book You that have problems with C# ------------ Read this book. .......

                              D 1 Reply Last reply
                              0
                              • D dilkonika

                                Hello Friend ! ( not dude ! ) You don't have my database , but you have my EF model from my first post. And as you have a lot's of experience , you can imagine how the database is. Anyway , my last question was not for database , but for a simple In memory For.. each loop that run slow. And I think it's not good to tell a someone " You have asked about this , ok take these books and read" . Then why this forum is still open , replace your webpage with a big poster : You that have problems with Entity ------ Read this book You that have problems with C# ------------ Read this book. .......

                                D Offline
                                D Offline
                                Dave Kreskowiak
                                wrote on last edited by
                                #22

                                dilkonika wrote:

                                You don't have my database , but you have my EF model from my first post.

                                Model, yes. Data, no.

                                dilkonika wrote:

                                Anyway , my last question was not for database , but for a simple In memory For.. each loop that run slow.

                                Oh, but it IS about your database. You just refuse to listen to why when I've told you time and time again. Your data is NOT in memory!! You have a proxy object that EF must go back to requery the data for and that's why it's so slow! That's why I keep telling you to use an Include to get the child elements into memory! That's why I keep telling you to pick up a book on EF so you understand all of these little details you don't understand about EF, such a "deferred execution" and "lazy loading"!

                                dilkonika wrote:

                                You that have problems with Entity ------ Read this book
                                You that have problems with C# ------------ Read this book.

                                There's simply too much information to cover in a few forum posts! Forums can NOT answer all questions because forum posts can NOT convey all of the little details of an answer in the limited space available to us. If we could... if we did that we'd all be writing entire book chapters for forum posts! :mad:

                                A guide to posting questions on CodeProject

                                Click this: Asking questions is a skill. Seriously, do it.
                                Dave Kreskowiak

                                D 2 Replies Last reply
                                0
                                • D Dave Kreskowiak

                                  dilkonika wrote:

                                  You don't have my database , but you have my EF model from my first post.

                                  Model, yes. Data, no.

                                  dilkonika wrote:

                                  Anyway , my last question was not for database , but for a simple In memory For.. each loop that run slow.

                                  Oh, but it IS about your database. You just refuse to listen to why when I've told you time and time again. Your data is NOT in memory!! You have a proxy object that EF must go back to requery the data for and that's why it's so slow! That's why I keep telling you to use an Include to get the child elements into memory! That's why I keep telling you to pick up a book on EF so you understand all of these little details you don't understand about EF, such a "deferred execution" and "lazy loading"!

                                  dilkonika wrote:

                                  You that have problems with Entity ------ Read this book
                                  You that have problems with C# ------------ Read this book.

                                  There's simply too much information to cover in a few forum posts! Forums can NOT answer all questions because forum posts can NOT convey all of the little details of an answer in the limited space available to us. If we could... if we did that we'd all be writing entire book chapters for forum posts! :mad:

                                  A guide to posting questions on CodeProject

                                  Click this: Asking questions is a skill. Seriously, do it.
                                  Dave Kreskowiak

                                  D Offline
                                  D Offline
                                  dilkonika
                                  wrote on last edited by
                                  #23

                                  Dim dt1 as DateTime=CDate("08/08/2014")

                                  Dim list1 = (From t In context.MyObj Select New With { _
                                  .Parent = t, _
                                  .chl = (From t2 In t.chld.AsQueryable.Where(Function(t3) t3.Date1>=dt1) Select t2)
                                  .sum1 =(From t2 in t.chld.AsQueryable.Where(Function(t2) t2.date1<dt1).Select(Function(t3) t3.quantity).DefaultIfEmpty
                                  }).ToList

                                  and after :

                                  For Each l In list1
                                  l.Parent.vls=l.sum1
                                  Next

                                  After the Tolist , all List1's : .Parent , .chl , .sum1 are in memory ? (That's the book's say about the .ToList , or show me an article that say the opposite ). So now the following , For...each is run on memory ? Or I'm wrong ? Thank you !

                                  1 Reply Last reply
                                  0
                                  • D Dave Kreskowiak

                                    dilkonika wrote:

                                    You don't have my database , but you have my EF model from my first post.

                                    Model, yes. Data, no.

                                    dilkonika wrote:

                                    Anyway , my last question was not for database , but for a simple In memory For.. each loop that run slow.

                                    Oh, but it IS about your database. You just refuse to listen to why when I've told you time and time again. Your data is NOT in memory!! You have a proxy object that EF must go back to requery the data for and that's why it's so slow! That's why I keep telling you to use an Include to get the child elements into memory! That's why I keep telling you to pick up a book on EF so you understand all of these little details you don't understand about EF, such a "deferred execution" and "lazy loading"!

                                    dilkonika wrote:

                                    You that have problems with Entity ------ Read this book
                                    You that have problems with C# ------------ Read this book.

                                    There's simply too much information to cover in a few forum posts! Forums can NOT answer all questions because forum posts can NOT convey all of the little details of an answer in the limited space available to us. If we could... if we did that we'd all be writing entire book chapters for forum posts! :mad:

                                    A guide to posting questions on CodeProject

                                    Click this: Asking questions is a skill. Seriously, do it.
                                    Dave Kreskowiak

                                    D Offline
                                    D Offline
                                    dilkonika
                                    wrote on last edited by
                                    #24

                                    Hello ! This is my last question : I don't know why , but this is working :

                                    Partial Public Class Myobj
                                    Public Property id As Integer
                                    Public property name as string
                                    Public Overridable Property chld As ICollection(Of chld) = New HashSet(Of chld)
                                    End Class

                                    Partial Public Class Myobj
                                    <NotMapped> Public Property vls As integer
                                    End Class

                                    Partial Public Class chld
                                    Public Property id As Integer
                                    Public Property date1 as DateTime
                                    Public Property quantity as Integer
                                    Public Property ParentID as integer
                                    Public Overridable Property MyObj1 As MyObj
                                    End Class

                                    Public Class PseudoMyObj
                                    Inherits MyObj
                                    End Class

                                    Now on my form, I have this code :

                                    Dim dt1 as DateTime=CDate("08/08/2014")

                                    Dim list1 = (From t In context.MyObj Select New With { _
                                    .Parent = New PseudoMyObj With { _
                                    .chld = (From t2 in t.chld.AsQueryable.Where(Function(t3) t3.Date1>=dt1) Select t2), _
                                    .vls=(t.chld.AsQueryable.Where(Function(t2) t2.date1<dt1).Select(Function(t3) t3.quantity).DefaultIfEmpty.Sum()) _
                                    }).ToList

                                    dim mylist as IEnumerable(of MyObj)=list1.Select(Function(t2) t2.Parent)

                                    Please , I want your opinion , do you see anything wrong with this code ? Thank you !

                                    D 1 Reply Last reply
                                    0
                                    • D dilkonika

                                      Hello ! This is my last question : I don't know why , but this is working :

                                      Partial Public Class Myobj
                                      Public Property id As Integer
                                      Public property name as string
                                      Public Overridable Property chld As ICollection(Of chld) = New HashSet(Of chld)
                                      End Class

                                      Partial Public Class Myobj
                                      <NotMapped> Public Property vls As integer
                                      End Class

                                      Partial Public Class chld
                                      Public Property id As Integer
                                      Public Property date1 as DateTime
                                      Public Property quantity as Integer
                                      Public Property ParentID as integer
                                      Public Overridable Property MyObj1 As MyObj
                                      End Class

                                      Public Class PseudoMyObj
                                      Inherits MyObj
                                      End Class

                                      Now on my form, I have this code :

                                      Dim dt1 as DateTime=CDate("08/08/2014")

                                      Dim list1 = (From t In context.MyObj Select New With { _
                                      .Parent = New PseudoMyObj With { _
                                      .chld = (From t2 in t.chld.AsQueryable.Where(Function(t3) t3.Date1>=dt1) Select t2), _
                                      .vls=(t.chld.AsQueryable.Where(Function(t2) t2.date1<dt1).Select(Function(t3) t3.quantity).DefaultIfEmpty.Sum()) _
                                      }).ToList

                                      dim mylist as IEnumerable(of MyObj)=list1.Select(Function(t2) t2.Parent)

                                      Please , I want your opinion , do you see anything wrong with this code ? Thank you !

                                      D Offline
                                      D Offline
                                      Dave Kreskowiak
                                      wrote on last edited by
                                      #25

                                      I already told you why it works. Your first query, and the sub-queries, on the database engine. Getting the SQL query statement from the debugger and examining it in Notepad or in SQL Server Manager would have told you that. Your second query, the last statement in your post, is executed client-side, not on the database engine. I'm not telling you these things, like the above technique, because I like hearing myself type this crap. I tell you these things because this is how I debug and examine the functionality of EF. Have a nice life.

                                      A guide to posting questions on CodeProject

                                      Click this: Asking questions is a skill. Seriously, do it.
                                      Dave Kreskowiak

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • World
                                      • Users
                                      • Groups