title: LINQ-To-DataSet Anonymous types - Double converted to integer - why?
body: <p>Below is my simplified class.
  I have 2 methods that are getting some data from dataset through LINQ.
  Then I have GetTotalSales() method that unions and sums all data.
  Before final union statement I am checking data in </p>
  
  <pre><code>For Each r In O1
          Dim t = r.TYWeekSales ' so far so good - t is decimal
      Next
  </code></pre>
  
  <p>and r.TYWeekSales is correct - it is decimal.
  after union statement:
          Dim union = O1.Union(O2)</p>
  
  <pre><code>    Dim TotalSales2 = From u In union
                        Group u By _
                        Name = u.Name
                        Into Group _
                        Select TYWeekNetSale = Group.Sum(Function(u) u.TYWeekNetSale), _
                               LYWeekNetSale = Group.Sum(Function(u) u.LYWeekNetSale)
  
      For Each r2 In TotalSales2
          Dim t2 = r2.TYWeekNetSale ' no good - t2 is an integer
      Next
  </code></pre>
  
  <p>t2 is converted to integer.  Why?  How can this be fixed?</p>
  
  <p><strong>Here is my whole class:</strong> </p>
  
  <pre><code>Public Class Class1
      Private _Orders1 As IEnumerable
      Private _Orders2 As IEnumerable
      Private _DSNetSales As DataSet
  
  Public Property Orders1() As IEnumerable
      Get
          Return _Orders1
      End Get
      Set(value As IEnumerable)
          _Orders1 = value
      End Set
  End Property
  
  Public Property Orders2() As IEnumerable
      Get
          Return _Orders2
      End Get
      Set(value As IEnumerable)
          _Orders2 = value
      End Set
  End Property
  
  Public Property DSNetSales() As DataSet
      Get
          Return _DSNetSales
      End Get
      Set(value As DataSet)
          _DSNetSales = value
      End Set
  End Property
  
  Private Sub GetSomething()
      Dim TYWeekSales = DSNetSales.Tables("T1").AsEnumerable()
      Dim TYWeekSalesData = From b In TYWeekSales
                  Group b By _
                  Name = b.Field(Of String)("loc")
                  Into Group _
                  Select Name,
                  TYWeekNetSale = Group.Sum(Function(b) b.Field(Of Decimal)("net")), _
                  LYWeekNetSale = CType(0.0, Decimal)
  
      Dim LYWeekSales = DSNetSales.Tables("T2").AsEnumerable()
      Dim LYWeekSalesData = From b In LYWeekSales
                  Group b By _
                  Name = b.Field(Of String)("loc")
                  Into Group _
                  Select Name,
                  TYWeekNetSale = CType(0.0, Decimal), _
                  LYWeekNetSale = Group.Sum(Function(b) b.Field(Of Decimal)("net"))
  
      Dim union = TYWeekSalesData.Union(LYWeekSalesData)
  
      Orders1 = From u In union
         Group u By _
         Name = u.Name
         Into Group _
         Select Name,
                TYWeekNetSale = Group.Sum(Function(u) u.TYWeekNetSale), _
                LYWeekNetSale = Group.Sum(Function(u) u.LYWeekNetSale)
  End Sub
  
  
  Private Sub GetSomethingElse()
      Dim TYWeekSales = DSNetSales.Tables("T3").AsEnumerable()
      Dim TYWeekSalesData = From b In TYWeekSales
                  Group b By _
                  Name = b.Field(Of String)("loc")
                  Into Group _
                  Select Name,
                  TYWeekNetSale = Group.Sum(Function(b) b.Field(Of Decimal)("net")), _
                  LYWeekNetSale = CType(0.0, Decimal)
  
      Dim LYWeekSales = DSNetSales.Tables("T4").AsEnumerable()
      Dim LYWeekSalesData = From b In LYWeekSales
                  Group b By _
                  Name = b.Field(Of String)("loc")
                  Into Group _
                  Select Name,
                  TYWeekNetSale = CType(0.0, Decimal), _
                  LYWeekNetSale = Group.Sum(Function(b) b.Field(Of Decimal)("net"))
  
      Dim union = TYWeekSalesData.Union(LYWeekSalesData)
  
      Orders2 = From u In union
                Group u By _
                Name = u.Name
                Into Group _
                Select Name,
                       TYWeekNetSale = Group.Sum(Function(u) u.TYWeekNetSale), _
                       LYWeekNetSale = Group.Sum(Function(u) u.LYWeekNetSale)
  End Sub
  
  
  Private Sub GetTotalSales()
      Dim O1 = From b In Orders1
      Dim O2 = From p In Orders2
  
      For Each r In O1
          Dim t = r.TYWeekSales ' so far so good - t is decimal
      Next
  
      For Each r In O2
          Dim t = r.TYWeekSales
      Next
  
      Dim union = O1.Union(O2)
  
  
      Dim TotalSales2 = From u In union
                        Group u By _
                        Name = u.Name
                        Into Group _
                        Select TYWeekNetSale = Group.Sum(Function(u) u.TYWeekNetSale), _
                               LYWeekNetSale = Group.Sum(Function(u) u.LYWeekNetSale)
  
      For Each r2 In TotalSales2
          Dim t2 = r2.TYWeekNetSale ' hmmm - t2 is an integer now
      Next
  
  End Sub
  </code></pre>
  
  <p>End Class</p>