Очень часто встречаются системы, в которых вся информация хранится в базе данных. Почти все, что использует компьютерный инструмент, требует базы данных в системе. Огромное количество данных уже существует, и каждый день создаются невообразимые объемы. Бесспорно, что база данных очень важна в современном обществе.

Также существует множество различных типов источников данных, которые используются в качестве базы данных: SQL, XML и т. д. Разработчикам необходимо реализовать правильный способ доступа к базе данных. Синтаксис другой, код может быть сложным и не интуитивно понятным. Таким образом, построение системы для взаимодействия с базой данных может быть менее эффективным по времени.

Microsoft представила LINQ (Language Integrated Query) вместе с .NET Framework 3.5 в 2007 году. Любой язык .NET, такой как C#, VB, может использовать LINQ, и статья посвящена C#. LINQ — это стандартизированный универсальный запрос. Другими словами, LINQ предоставляет единую модель программирования для запросов к базе данных. Он более удобочитаем и интуитивно понятен, поскольку LINQ можно реализовать с помощью более простых и похожих на SQL команд.

LINQ имеет два разных синтаксиса: Query; Свободный (или метод). Синтаксис запроса больше похож на команды SQL. Синтаксис Fluent проще и использует лямбда-выражение. Свободный синтаксис обычно используется чаще, чем запрос.

Для глубокого понимания LINQ требуется крутая кривая обучения, но для незнакомых разработчиков это легко. Поскольку кода не так много и он более удобочитаем, разработчики могут более эффективно выполнять отладку.

На рисунке ниже показана архитектура LINQ:

Источник: https://www.codeproject.com/Articles/19154/Understanding-LINQ-C”

В 2014 году вместе с Stream была представлена ​​Java 8. В Интернете есть несколько дискуссий, посвященных сравнению LINQ и Java Stream. Как и в случае с языками программирования, нет сильной точки зрения на то, что лучше. Существует реализация, представляющая собой комбинацию Java и LINQ. Он называется jLinqer. На странице GitHub https://github.com/jlinqer/jLinqer показана сравнительная таблица между Java, C# LINQ, jLinqer. Похоже, что LINQ(C#) и jLinqer имеют одинаковую функциональность, тогда как в Java Stream отсутствует половина того, что могут предложить LINQ и jLinqer. Java 8 — довольно недавний выпуск, и вполне вероятно, что Stream будет быстро улучшаться.

Чтобы использовать LINQ, приведенный ниже оператор необходимо ввести в классе C#. Это эквивалентно «импорту» в Java.

LINQ устраняет необходимость использования цикла при извлечении нескольких результатов. Давайте посмотрим на простой пример, чтобы увидеть, чем отличается синтаксис при использовании LINQ.

Ниже приведен объект массива учеников, который содержит 8 объектов учеников:

Student[] studentarray = { new Student() { StudentId = 1, StudentName = "john", Age = 18, Major = "Network" }, new Student() { StudentId = 2, StudentName = "steve", Age = 21, Major = "Programming" }, new Student() { StudentId = 3, StudentName = "bill", Age = 25, Major = "Programming" }, new Student() { StudentId = 4, StudentName = "ram", Age = 20, Major = "Computer Systems" }, new Student() { StudentId = 5, StudentName = "ron", Age = 31, Major = "Telecommunications" }, new Student() { StudentId = 6, StudentName = "chris", Age = 27, Major = "Network" }, new Student() { StudentId = 7, StudentName = "rob", Age = 19, Major = "Computer Systems" }, new Student() { StudentId = 8, StudentName = "bill", Age = 25, Major = "Telecommunications" } };

Как обсуждалось в предыдущем посте, существует два разных способа использования LINQ:Query, Fluent (или Method).

В следующем коде показан синтаксис запроса:

var q = from students in studentarray where students.StudentId > 5 select students;

В C# «var q» достаточно умен, чтобы определить присваиваемый тип данных, поэтому это будет массив учеников. Обратите внимание, как код похож на команды SQL. Переменная «студенты» называется «переменная диапазона» и хранит элемент из «студенческого массива». «var q» хранит студентов, у которых идентификационный номер больше 5. Вывод массива print q:

Давайте посмотрим на свободный синтаксис. Для этого выражения используется лямбда-выражение, и оно особенно полезно для написания запроса LINQ. Команда больше не похожа на SQL, но вы можете заметить, что код становится простым и в то же время интуитивно понятным.

var q = studentarray.Where(s => s.StudentId > 5).ToArray();

Как вы могли заметить, код стал намного проще при достижении того же результата. Буква «s» называется входным параметром, и ее может быть больше одной. Здесь мы просто сосредоточимся на одном параметре. Входной параметр может знать, когда на объект ссылаются сами по себе. В данном случае это будет Студент. Вы можете явно указать, какой тип данных там (например, Student s), и он работает так же. Символ «=›» называется «переходит к». Тем не менее, «идет в» не является стандартным названием, и люди часто называют его по своему усмотрению. Я думаю, что «сопоставляется с» может заменить его для лучшего понимания, поэтому это будет что-то вроде «Сопоставление студента со своим атрибутом StudentID».

«Где» эквивалентно предложению where в SQL и фильтру в Java 8 Stream.

Arrays.stream(studentarray).filter(s -> s.getStudentId() > 5).toArray(Student[]::new);

Выше приведен код Java Stream, который выполняет ту же работу, что и наш пример C#. Есть некоторые различия в синтаксисе, такие как указание типа возвращаемых данных и символ «переходит к».

Java 8 Stream также использует лямбда-выражение и часто сравнивается с LINQ. Однако сам Stream еще не имеет такой же функции. Есть вещь под названием «jLinqer», которая представляет собой комбинацию LINQ и Stream. Он обеспечивает идентичную функциональность LINQ в соответствии со страницей jLinqer на github. Я не думаю, что этот метод широко используется, возможно, потому, что он довольно новый.

Вернемся к C#. LINQ может выполнять другие команды, подобные SQL.

var c = studentarray.Where(d => d.StudentId > 5).OrderBy(k => k.Age);

«.OrderBy» добавляется в конце, и это соответствует тому, что там написано. В выходных данных показаны учащиеся, отсортированные в порядке возрастания возраста, и их ID больше 5.

Теперь я покажу вам, как можно легко использовать LINQ для запроса XML-данных.

Ниже показано, как выглядит XML, который я создал.

<students> <student id ="1"> <studentId>1</studentId> <studentName>Joe</studentName> <Age>23</Age> <Major>Software Development</Major> </student> </students>

Прежде чем идти дальше, эта команда должна быть в коде, чтобы читать XML-данные с помощью LINQ.

По сути, это позволяет вам использовать команду «XDocument» для чтения XML-файла.

На этот раз я покажу вам и запрос, и беглый способ одновременно.

//Read XML file XDocument xdoc = XDocument.Load("Student.xml"); //Query var r = from item in xdoc.Descendants("student") select new { StudentId = item.Element("studentId").Value, StudentName = item.Element("studentName").Value, Age = item.Element("Age").Value, Major = item.Element("Major").Value }; // Fluent r = xdoc.Descendants("student").Select(p => new { StudentId = p.Element("studentId").Value, StudentName = p.Element("studentName").Value, Age = p.Element("Age").Value, Major = p.Element("Major").Value }).OrderBy (k => k.Age);

Теперь они должны выглядеть довольно знакомо, если вы помните предыдущие примеры. Вы должны заметить, что «студент» указан для потомков. «Студент» — это элемент, а «Студенты» — корневой элемент. Вы должны убедиться, что поместили элемент, а НЕ корень.

Приведенный выше пример запроса и беглой речи будет делать то же самое, за исключением того, что в беглой версии выходные данные будут отсортированы по возрасту.

C# не входит в тройку доминирующих языков в мире, но, похоже, он набирает свою популярность. По данным github, он занял 8-е место среди популярных языков, используемых на github в 2015 году. Статистика Github не отражает его точную популярность, но в целом, я думаю, это так.

Если вы знаете Java, я думаю, что C# может быть хорошим выбором следующего языка. Вы быстро поймете C#, поскольку это также ООП. Возможно, вам повезет найти работу в более крупной корпорации, потому что они часто ищут разработчика, который может создать для них внутреннее приложение с помощью WPF (Windows Presentation Foundation). Если вы выпускник (который скоро станет) программы разработки программного обеспечения, ориентированной на информационные системы, знакомство с C# и LINQ может сыграть большую роль, если вы решите работать в компании для внутренних должностей.

Кроме того, вы можете продолжить свою карьеру в игровой индустрии. В Канаде есть игровые компании, о которых вы наверняка слышали: BioWare, Ubisoft, Rockstar, EA и многие другие. К Unity можно легко подойти, зная C#. Unity широко используется для инди-игр из-за его доступности, но это не значит, что крупные компании не используют Unity. Такие компании, как Ubisoft, EA, используют Unity.

В заключение, C# легко понять, если вы знакомы с другим языком ООП, и у вас может быть более разнообразный выбор карьеры.

Ниже приведен список литературы, который помог мне понять C# LINQ, а также некоторые другие сведения.

  1. https://github.com/jlinqer/jLinqer
  2. http://www.slideshare.net/kiskkato/stream-vs-linq
  3. http://stackoverflow.com/questions/16322/learning-about-linq
  4. https://www.codeproject.com/Articles/19154/Understanding-LINQ-C#Introduction
  5. https://www.youtube.com/watch?v=Kn_clV8mVOM&t=209s
  6. http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/reading-xml-file-through-linq-a-few-tips/
  7. https://github.com/blog/2047-language-trends-on-github
  8. https://madewith.unity.com/games