VB.Net/LINQ/Anonymous Object

Материал из VB Эксперт
Перейти к: навигация, поиск

An anonymous type is returned containing the Id, Name and Pay

<source lang="vbnet"> Imports System Imports System.Xml.Linq

   Public Class MainClass
       Public Shared Sub Main()
           Dim employees As XElement = XElement.Load("Employees.xml")
           Dim query = From ele In employees.<Employee> _
                       Where CDbl(ele.<HourlyRate>.Value) >= 100 _
                       Select ele.@id, ele.<Name>.Value, Pay = CDbl(ele.<HourlyRate>.Value) _
                       Order By Name
           For Each emp In query
               Console.WriteLine("[{0,-2}] {1,-25} ${2,-6}", emp.id, emp.Name, emp.Pay.ToString("##.00"))
           Next
       End Sub
   End Class
  
   
 </source>


Calls ToString() on each anonymous object

<source lang="vbnet">


Public Class Car

 Public PetName As String = String.Empty
 Public Color As String = String.Empty
 Public Speed As Integer
 Public Make As String = String.Empty
 Public Overloads Overrides Function ToString() As String
   Return String.Format("Make={0}, Color={1}, Speed={2}, PetName={3}", _
     Make, Color, Speed, PetName)
 End Function

End Class Module Program

 Sub Main()
       Dim myCars As New List(Of Car)(New Car() { _
   New Car With {.PetName = "D", .Color = "Silver", .Speed = 100, .Make = "BMW"}, _
   New Car With {.PetName = "C", .Color = "Tan", .Speed = 90, .Make = "BMW"}, _
   New Car With {.PetName = "B", .Color = "Rust", .Speed = 5, .Make = "Yugo"}, _
   New Car With {.PetName = "A", .Color = "White", .Speed = 43, .Make = "Ford"}})
   Dim makesColors = From c In myCars Select New With {c.Make, c.Color}
   Dim objs As Array = makesColors.ToArray()
   For Each o As Object In objs
     Console.WriteLine(o)  " .
   Next
 End Sub

End Module


 </source>


Create anonymous type from query

<source lang="vbnet"> Imports System.Collections.Generic Imports System.Linq Imports System.Runtime.rupilerServices

Public Class Role

   Public ID As Integer
   Public RoleDescription As String

End Class Public Class Person

   Public ID As Integer
   Public IDRole As Integer
   Public LastName As String
   Public FirstName As String

End Class

Module Module1

   Sub Main()
       Dim people As New List(Of Person)(New Person() { _
           New Person With {.ID = 1, .IDRole = 1, .LastName = "A", .FirstName = "Brad"}, _
           New Person With {.ID = 2, .IDRole = 2, .LastName = "G", .FirstName = "Tom"} _
       })
       Dim roles As New List(Of Role)(New Role() { _
           New Role With {.ID = 1, .RoleDescription = "Manager"}, _
           New Role With {.ID = 2, .RoleDescription = "Developer"} _
       })
       Dim query = From p In people Where p.ID = 1 Select New With {p.FirstName, p.LastName}
   End Sub

End Module


 </source>


Create anonymous type in query and convert to array

<source lang="vbnet"> Imports System.Collections.Generic Imports System.Linq Imports System.Runtime.rupilerServices

Public Class Role

   Public ID As Integer
   Public RoleDescription As String

End Class Public Class Person

   Public ID As Integer
   Public IDRole As Integer
   Public LastName As String
   Public FirstName As String

End Class Module Module1

   Sub Main()
       Dim people As New List(Of Person)(New Person() { _
           New Person With {.ID = 1, .IDRole = 1, .LastName = "A", .FirstName = "Brad"}, _
           New Person With {.ID = 2, .IDRole = 2, .LastName = "G", .FirstName = "Tom"} _
       })
       Dim roles As New List(Of Role)(New Role() { _
           New Role With {.ID = 1, .RoleDescription = "Manager"}, _
           New Role With {.ID = 2, .RoleDescription = "Developer"} _
       })
       Dim query = (From p In people Where p.ID = 1 Select New With {p.FirstName, p.LastName}).ToArray()
       people(0).FirstName = "Fabio"
   End Sub

End Module


 </source>


Get structured data which only accounts for the Make and Color of each item

<source lang="vbnet"> Public Class Car

 Public PetName As String = String.Empty
 Public Color As String = String.Empty
 Public Speed As Integer
 Public Make As String = String.Empty
 Public Overloads Overrides Function ToString() As String
   Return String.Format("Make={0}, Color={1}, Speed={2}, PetName={3}", Make, Color, Speed, PetName)
 End Function

End Class Module Program

 Sub Main()
       Dim myCars As New List(Of Car)(New Car() { _
   New Car With {.PetName = "D", .Color = "Silver", .Speed = 100, .Make = "BMW"}, _
   New Car With {.PetName = "C", .Color = "Tan", .Speed = 90, .Make = "BMW"}, _
   New Car With {.PetName = "B", .Color = "Rust", .Speed = 5, .Make = "Yugo"}, _
   New Car With {.PetName = "A", .Color = "White", .Speed = 43, .Make = "Ford"}})
   Dim makesColors = From c In myCars Select New With {c.Make, c.Color}
   For Each n In makesColors
     Console.WriteLine("Name: {0}", n)
   Next

 End Sub

End Module


 </source>


Linq way of doing Object creation

<source lang="vbnet"> Imports System.Collections.Generic Imports System.Linq Imports System.Runtime.rupilerServices

Public Class Role

   Public ID As Integer
   Public RoleDescription As String

End Class Public Class Person

   Public ID As Integer
   Public IDRole As Integer
   Public LastName As String
   Public FirstName As String

End Class

Module Module1

   Sub Main()
       Dim people As New List(Of Person)(New Person() { _
           New Person With {.ID = 1, .IDRole = 1, .LastName = "A", .FirstName = "Brad"}, _
           New Person With {.ID = 2, .IDRole = 2, .LastName = "G", .FirstName = "Tom"} _
       })
       Dim roles As New List(Of Role)(New Role() { _
           New Role With {.ID = 1, .RoleDescription = "Manager"}, _
           New Role With {.ID = 2, .RoleDescription = "Developer"} _
       })
       Dim p2 = New Person With {.FirstName = "Tom", .LastName = "Gray"}
   End Sub

End Module


 </source>