Очень часто встречаются системы, в которых вся информация хранится в базе данных. Почти все, что использует компьютерный инструмент, требует базы данных в системе. Огромное количество данных уже существует, и каждый день создаются невообразимые объемы. Бесспорно, что база данных очень важна в современном обществе.
Также существует множество различных типов источников данных, которые используются в качестве базы данных: 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, а также некоторые другие сведения.
- https://github.com/jlinqer/jLinqer
- http://www.slideshare.net/kiskkato/stream-vs-linq
- http://stackoverflow.com/questions/16322/learning-about-linq
- https://www.codeproject.com/Articles/19154/Understanding-LINQ-C#Introduction
- https://www.youtube.com/watch?v=Kn_clV8mVOM&t=209s
- http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/reading-xml-file-through-linq-a-few-tips/
- https://github.com/blog/2047-language-trends-on-github
- https://madewith.unity.com/games