Linq 简明教程

LINQ - Objects

LINQ to Objects 提供对任何支持 IEnumerable<T> 的 LINQ 查询的使用,用于访问内存中数据集合,无需 LINQ 提供程序 (API),如 LINQ to SQL 或 LINQ to XML。

LINQ to Objects offers usage of any LINQ query supporting IEnumerable<T>for accessing in-memory data collections without any need of LINQ provider (API) as in case of LINQ to SQL or LINQ to XML.

Introduction of LINQ to Objects

LINQ to Objects 中的查询通常仅返回类型为 IEnumerable<T> 的变量。简而言之,LINQ to Objects 提供了一种新的集合方法,如前所述,以前必须编写长编码(非常复杂的 foreach 循环)才能从集合中检索数据,现在已替换为编写声明性代码,其中明确描述了需要检索的目标数据。

Queries in LINQ to Objects return variables of type usually IEnumerable<T> only. In short, LINQ to Objects offers a fresh approach to collections as earlier, it was vital to write long coding (foreach loops of much complexity) for retrieval of data from a collection which is now replaced by writing declarative code which clearly describes the desired data that is required to retrieve.

LINQ to Objects 还比传统的 foreach 循环具有更多的优势,例如,可读性更好,过滤功能更强大,分组功能更强大,增强排序功能,同时应用程序编码更少。此类 LINQ 查询本质上也更紧凑,并且可以移植到任何其他数据源,而无需进行任何修改或只需进行少量修改。

There are also many advantages of LINQ to Objects over traditional foreach loops like more readability, powerful filtering, capability of grouping, enhanced ordering with minimal application coding. Such LINQ queries are also more compact in nature and are portable to any other data sources without any modification or with just a little modification.

下面是一个简单的 LINQ to Objects 示例:

Below is a simple LINQ to Objects example −

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQtoObjects {
   class Program {
      static void Main(string[] args) {

         string[] tools = { "Tablesaw", "Bandsaw", "Planer", "Jointer", "Drill", "Sander" };
         var list = from t in tools select t;

         StringBuilder sb = new StringBuilder();

         foreach (string s in list) {
            sb.Append(s + Environment.NewLine);
         }

         Console.WriteLine(sb.ToString(), "Tools");
         Console.ReadLine();
      }
   }
}

在该示例中,字符串数组(工具)用作使用 LINQ to Objects 查询的对象集合。

In the example, an array of strings (tools) is used as the collection of objects to be queried using LINQ to Objects.

Objects query is:
var list = from t in tools select t;

编译并执行上述代码后,将产生以下结果 −

When the above code is compiled and executed, it produces the following result −

Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander

Querying in Memory Collections Using LINQ to Objects

C

using System;
using System.Collections.Generic;
using System.Linq;

namespace LINQtoObjects {
   class Department {
      public int DepartmentId { get; set; }
      public string Name { get; set; }
   }

   class LinqToObjects {
      static void Main(string[] args) {

         List<Department> departments = new List<Department>();

         departments.Add(new Department { DepartmentId = 1, Name = "Account" });
         departments.Add(new Department { DepartmentId = 2, Name = "Sales" });
         departments.Add(new Department { DepartmentId = 3, Name = "Marketing" });

         var departmentList = from d in departments
                              select d;

         foreach (var dept in departmentList) {
            Console.WriteLine("Department Id = {0} , Department Name = {1}",
               dept.DepartmentId, dept.Name);
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Collections.Generic
Imports System.Linq

Module Module1

   Sub Main(ByVal args As String())

      Dim account As New Department With {.Name = "Account", .DepartmentId = 1}
      Dim sales As New Department With {.Name = "Sales", .DepartmentId = 2}
      Dim marketing As New Department With {.Name = "Marketing", .DepartmentId = 3}

      Dim departments As New System.Collections.Generic.List(Of Department)(New Department() {account, sales, marketing})

      Dim departmentList = From d In departments

      For Each dept In departmentList
         Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
   End Sub

   Class Department
      Public Property Name As String
      Public Property DepartmentId As Integer
   End Class

End Module

当以上 C# 或 VB 代码被编译并执行时,它会生成以下结果 -

When the above code of C# or VB is compiled and executed, it produces the following result −

Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing

Press any key to continue.