LINQ to Objects предлагает использовать любой запрос LINQ, поддерживающий IEnumerable <T>, для доступа к коллекциям данных в памяти без необходимости использования поставщика LINQ (API), как в случае LINQ to SQL или LINQ to XML.
Введение LINQ в объекты
Запросы в 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(); } } }
В этом примере массив строк (инструментов) используется в качестве коллекции объектов, которые запрашиваются с помощью LINQ to Objects.
Objects query is: var list = from t in tools select t;
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
Tablesaw Bandsaw Planer Jointer Drill Sander
Запросы в коллекции памяти с использованием LINQ для объектов
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 компилируется и выполняется, он дает следующий результат —