LINQ 物件
LINQ to Objects 允許使用任何支援 IEnumerable<T> 的 LINQ 查詢,以訪問記憶體中的資料集合,而無需使用 LINQ 供應商 (API),就像 LINQ to SQL 或 LINQ to XML 中的情況。
LINQ to Objects 簡介
LINQ to Objects 中的查詢通常只返回型別為 IEnumerable<T> 的變數。簡而言之,LINQ to Objects 為集合提供了一種新的方法,因為以前,必須編寫冗長的編碼(高複雜度的 foreach 迴圈)才能從集合中檢索資料,而現在則改用編寫描述該所需檢索資料的宣告性程式碼。
LINQ to Objects 相較於傳統的 foreach 迴圈有許多優勢,如更強的可讀性、強大的篩選、分組能力、最少的應用程式編碼即可增強排序。此類 LINQ 查詢本質上也更緊湊,並且可以移植到任何其他資料來源,而無需修改或只需進行少量修改。
下面是一個簡單的 LINQ to Objects 示例 −
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();
}
}
}
在該示例中,字串陣列 (tools) 用作要使用 LINQ to Objects 查詢的物件集合。
Objects query is: var list = from t in tools select t;
當編譯並執行上述程式碼時,會生成以下結果 −
Tablesaw Bandsaw Planer Jointer Drill Sander
使用 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 程式碼時,會生成以下結果 −
Department Id = 1, Department Name = Account Department Id = 2, Department Name = Sales Department Id = 3, Department Name = Marketing Press any key to continue.
廣告