Учебники

LINQ — Объекты

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 компилируется и выполняется, он дает следующий результат —