VB.Net/LINQ/Anonymous Object

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

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

  
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


Calls ToString() on each anonymous object

  


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


Create anonymous type from query

  
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


Create anonymous type in query and convert to array

  
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


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

  
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


Linq way of doing Object creation

  
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