一、模块代码
' Fig. 9.4: LINQWithArrayOfObjects.vb' LINQ to Objects using an array of Employee objects.Module LINQWithArrayOfObjects Sub Main() ' initialize array of employees Dim employees As Employee() = { _ New Employee("Jason", "Red", 5000D), _ New Employee("Ashley", "Green", 7600D), _ New Employee("Matthew", "Indigo", 3587.5D), _ New Employee("James", "Indigo", 4700.77D), _ New Employee("Luke", "Indigo", 6200D), _ New Employee("Jason", "Blue", 3200D), _ New Employee("Wendy", "Brown", 4236.4D)} ' end initializer list Display(employees, "Original array") ' display all employees ' filter a range of salaries using AndAlso in a LINQ query Dim between4K6K = _ From e In employees _ Where e.MonthlySalary >= 4000D AndAlso e.MonthlySalary <= 6000D _ Select e ' display employees making between 4000 and 6000 per month Display(between4K6K, String.Format( _ "Employees earning in the range {0:C}-{1:C} per month", _ 4000, 6000)) ' order the employees by last name, then first name with LINQ Dim nameSorted = _ From e In employees _ Order By e.LastName, e.FirstName _ Select e Console.WriteLine("First employee when sorted by name:") ' header ' attempt to display the first result of the above LINQ query If nameSorted.Count() = 0 Then Console.WriteLine("not found" & vbNewLine) Else Console.WriteLine(nameSorted.First().ToString() & vbNewLine) End If ' use LINQ's Distinct clause to select unique last names Dim lastNames = _ From e In employees _ Select e.LastName _ Distinct ' display unique last names Display(lastNames, "Unique employee last names") ' use LINQ to select first and last names Dim names = _ From e In employees _ Select e.FirstName, Last = e.LastName Display(names, "Names only") ' display full names End Sub ' Main ' display a sequence of any type, each on a separate line Sub Display(Of T)(ByVal results As IEnumerable(Of T), ByVal header As String) Console.WriteLine("{0}:", header) ' display header ' display each element, separated by spaces For Each element As T In results Console.WriteLine(element) Next Console.WriteLine() ' add end of line End Sub ' DisplayEnd Module ' LINQWithArrayOfObjects' **************************************************************************' * (C) Copyright 1992-2009 by Deitel & Associates, Inc. and *' * Pearson Education, Inc. All Rights Reserved. *' * *' * DISCLAIMER: The authors and publisher of this book have used their *' * best efforts in preparing the book. These efforts include the *' * development, research, and testing of the theories and programs *' * to determine their effectiveness. The authors and publisher make *' * no warranty of any kind, expressed or implied, with regard to these *' * programs or to the documentation contained in these books. The authors *' * and publisher shall not be liable in any event for incidental or *' * consequential damages in connection with, or arising out of, the *' * furnishing, performance, or use of these programs. *' **************************************************************************
二、类代码
' Fig. 9.3: Employee.vb' Employee class with FirstName, LastName and MonthlySalary properties.Public Class Employee Private firstNameValue As String ' first name of employee Private lastNameValue As String ' last name of employee Private monthlySalaryValue As Decimal ' monthly salary of employee ' constructor initializes first name, last name and monthly salary Public Sub New(ByVal first As String, ByVal last As String, ByVal salary As Decimal) FirstName = first LastName = last MonthlySalary = salary End Sub ' New ' property that gets and sets the employee's first name Public Property FirstName() As String Get Return firstNameValue End Get Set(ByVal value As String) firstNameValue = value End Set End Property ' FirstName ' property that gets and sets the employee's last name Public Property LastName() As String Get Return lastNameValue End Get Set(ByVal value As String) lastNameValue = value End Set End Property ' LastName ' property that gets and sets the employee's monthly salary Public Property MonthlySalary() As Decimal Get Return monthlySalaryValue End Get Set(ByVal value As Decimal) If value >= 0 Then ' if salary is non-negative(非负) monthlySalaryValue = value End If End Set End Property ' MonthlySalary ' return a String containing the employee's information ' left justify each field, and give large enough spaces so all the columns line up. Public Overrides Function ToString() As String Return String.Format("{0,-10} {1,-10} {2,10:C}", FirstName, LastName, MonthlySalary) End Function ' ToStringEnd Class ' Employee' **************************************************************************' * (C) Copyright 1992-2009 by Deitel & Associates, Inc. and *' * Pearson Education, Inc. All Rights Reserved. *' * *' * DISCLAIMER: The authors and publisher of this book have used their *' * best efforts in preparing the book. These efforts include the *' * development, research, and testing of the theories and programs *' * to determine their effectiveness. The authors and publisher make *' * no warranty of any kind, expressed or implied, with regard to these *' * programs or to the documentation contained in these books. The authors *' * and publisher shall not be liable in any event for incidental or *' * consequential damages in connection with, or arising out of, the *' * furnishing, performance, or use of these programs. *' **************************************************************************
三、运行结果
来源:Visual Basic 2008 how to program