{"id":322,"date":"2023-05-09T21:16:08","date_gmt":"2023-05-09T21:16:08","guid":{"rendered":"https:\/\/www.w3computing.com\/articles\/?p=322"},"modified":"2023-08-23T16:21:55","modified_gmt":"2023-08-23T16:21:55","slug":"use-linq-advanced-data-manipulation-csharp","status":"publish","type":"post","link":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/","title":{"rendered":"How to Use LINQ for Advanced Data Manipulation in C#"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various sources using a consistent, expressive syntax. LINQ brings the power of querying data to the C# language itself, making it easier to work with collections, databases, and XML data, among others.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The use of LINQ for advanced data manipulation in C# comes with numerous benefits. It enhances code readability, reduces the amount of code required, and provides strong typing, which reduces the likelihood of runtime errors. Furthermore, LINQ offers support for both query syntax and method syntax, allowing developers to choose the approach that best suits their needs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article is tailored for intermediate to advanced C# developers who are already familiar with the basics of LINQ and are looking to explore its more advanced features and techniques. We will cover topics such as deferred execution, advanced LINQ methods, LINQ to XML, LINQ to SQL, and more. By the end of this article, you will have a deeper understanding of how to leverage LINQ for powerful data manipulation in your C# applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before diving into the advanced topics of LINQ, it&#8217;s essential to have a solid foundation in the following areas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Basic knowledge of C#: A good understanding of C# programming concepts, such as variables, data types, loops, conditional statements, methods, and classes, is necessary. This will help you grasp the LINQ concepts and techniques more effectively.<\/li>\n\n\n\n<li>Familiarity with LINQ syntax and concepts: It&#8217;s important to have a basic understanding of LINQ, including its purpose, syntax, and core concepts such as querying, filtering, and sorting. Familiarity with standard LINQ query operators, like Select, Where, and OrderBy, is also crucial.<\/li>\n\n\n\n<li>Understanding of collections and generics in C#: Working with LINQ often involves using collections, such as arrays, lists, and dictionaries, as well as generics, which allow you to create type-safe data structures and methods. A solid understanding of these concepts will enable you to write efficient and expressive LINQ queries.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up the environment<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To get started with advanced LINQ techniques in C#, you&#8217;ll need a suitable development environment. This section outlines the necessary steps to set up your environment and create a new C# project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installing and configuring Visual Studio or Visual Studio Code<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visual Studio<\/strong>: Download and install Visual Studio from the official website (<a href=\"https:\/\/visualstudio.microsoft.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/visualstudio.microsoft.com\/<\/a>). The Community edition is free and includes everything you need for C# development. During the installation process, make sure to select the &#8220;.NET desktop development&#8221; workload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visual Studio Code<\/strong>: Download and install Visual Studio Code from the official website (<a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/code.visualstudio.com\/<\/a>). After installing, open Visual Studio Code, and navigate to the Extensions view by clicking on the Extensions icon in the Activity Bar on the side of the window. Search for the &#8220;C# for Visual Studio Code&#8221; extension by Microsoft and install it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Creating a new C# project<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visual Studio<\/strong>: Open Visual Studio and click &#8220;Create a new project&#8221; on the start page. Select &#8220;Console App (.NET)&#8221; from the list of templates and click &#8220;Next.&#8221; Choose a name and location for your project, then click &#8220;Create&#8221; to generate the new C# project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visual Studio Code<\/strong>: Open Visual Studio Code and open the integrated terminal by selecting &#8220;View&#8221; > &#8220;Terminal&#8221; from the menu. In the terminal, navigate to the folder where you want to create the project. Use the following command to create a new C# console application: <code><strong>dotnet new console -n YourProjectName<\/strong><\/code>. Replace &#8220;YourProjectName&#8221; with the desired name for your project. After the project is created, navigate to the project folder using <code><strong>cd YourProjectName<\/strong><\/code> and open the project in Visual Studio Code by typing <code><strong>code .<\/strong><\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Adding necessary namespaces for LINQ<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To start using LINQ in your C# project, you need to add the necessary namespaces at the top of your main C# file (usually Program.cs). Add the following using directives:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System.Linq;\r\n<span class=\"hljs-keyword\">using<\/span> System.Collections.Generic;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The <code><strong>System.Linq<\/strong><\/code> namespace contains the core LINQ classes and extension methods, while <code><strong>System.Collections.Generic<\/strong><\/code> provides generic collections like List and Dictionary, which are commonly used with LINQ.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Advanced LINQ methods and techniques<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Deferred execution<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Deferred execution, also known as lazy evaluation, is a powerful feature in LINQ that postpones the execution of a query until the results are actually needed. This can lead to improved performance, as unnecessary computations are avoided, and the query is only executed when absolutely required.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In LINQ, query expressions are not executed immediately when they are defined. Instead, they are executed when the results are enumerated, typically by iterating over them using a foreach loop, converting them to a list or an array, or when an aggregation function like Count, Sum, or First is called. This behavior allows you to chain multiple query operations together, or even modify the underlying data source, before the final results are computed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider the following example that demonstrates deferred execution with a simple list of integers:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System;\r\n<span class=\"hljs-keyword\">using<\/span> System.Linq;\r\n<span class=\"hljs-keyword\">using<\/span> System.Collections.Generic;\r\n\r\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Program<\/span>\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Main<\/span>(<span class=\"hljs-params\"><\/span>)<\/span>\r\n    {\r\n        List&lt;<span class=\"hljs-keyword\">int<\/span>&gt; numbers = <span class=\"hljs-keyword\">new<\/span> List&lt;<span class=\"hljs-keyword\">int<\/span>&gt; { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\n        <span class=\"hljs-comment\">\/\/ Define the LINQ query but don't execute it yet<\/span>\r\n        <span class=\"hljs-keyword\">var<\/span> evenNumbers = numbers.Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>);\r\n\r\n        <span class=\"hljs-comment\">\/\/ Add more elements to the list<\/span>\r\n        numbers.Add(<span class=\"hljs-number\">6<\/span>);\r\n        numbers.Add(<span class=\"hljs-number\">7<\/span>);\r\n        numbers.Add(<span class=\"hljs-number\">8<\/span>);\r\n\r\n        <span class=\"hljs-comment\">\/\/ Execute the query by enumerating the results<\/span>\r\n        <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> number <span class=\"hljs-keyword\">in<\/span> evenNumbers)\r\n        {\r\n            Console.WriteLine(number);\r\n        }\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, the <code><strong>evenNumbers<\/strong><\/code> query is defined to filter out even numbers from the <code><strong>numbers<\/strong><\/code> list. However, the query is not executed immediately. After defining the query, more elements are added to the list. When the foreach loop is executed, the <code><strong>evenNumbers<\/strong><\/code> query is finally evaluated, taking into account the newly added elements as well. The output will be:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">2\r\n4\r\n6\r\n8<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Deferred execution allows you to define complex query chains and optimize performance by executing the entire chain of operations only when the results are actually needed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Projection<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Projection is a powerful technique in LINQ that allows you to transform or shape the data being queried. It enables you to create new objects or select a subset of properties from the original data source based on specific requirements.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Using Select and SelectMany for transforming data<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Select<\/strong>: The <code><strong>Select<\/strong><\/code> method is used for one-to-one mapping, where each element in the input sequence is mapped to a single output element. It takes a delegate or lambda expression as an argument, which defines the transformation to be applied to each element in the collection.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">List&lt;<span class=\"hljs-keyword\">int<\/span>&gt; numbers = <span class=\"hljs-keyword\">new<\/span> List&lt;<span class=\"hljs-keyword\">int<\/span>&gt; { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\n<span class=\"hljs-comment\">\/\/ Using Select to square each number<\/span>\r\n<span class=\"hljs-keyword\">var<\/span> squaredNumbers = numbers.Select(n =&gt; n * n);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> squared <span class=\"hljs-keyword\">in<\/span> squaredNumbers)\r\n{\r\n    Console.WriteLine(squared);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-number\">1<\/span>\r\n<span class=\"hljs-number\">4<\/span>\r\n<span class=\"hljs-number\">9<\/span>\r\n<span class=\"hljs-number\">16<\/span>\r\n<span class=\"hljs-number\">25<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>SelectMany<\/strong>: The <code><strong>SelectMany<\/strong><\/code> method is used for one-to-many mapping, where each element in the input sequence is mapped to a collection of output elements. This is useful when you need to flatten a hierarchical data structure into a single sequence of elements.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">List&lt;<span class=\"hljs-keyword\">string<\/span>&gt; phrases = <span class=\"hljs-keyword\">new<\/span> List&lt;<span class=\"hljs-keyword\">string<\/span>&gt; { <span class=\"hljs-string\">\"Hello World\"<\/span>, <span class=\"hljs-string\">\"LINQ is great\"<\/span> };\r\n\r\n<span class=\"hljs-comment\">\/\/ Using SelectMany to obtain a flat sequence of characters<\/span>\r\n<span class=\"hljs-keyword\">var<\/span> allCharacters = phrases.SelectMany(phrase =&gt; phrase.ToCharArray());\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> character <span class=\"hljs-keyword\">in<\/span> allCharacters)\r\n{\r\n    Console.WriteLine(character);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">H\r\ne\r\nl\r\nl\r\no\r\n(space)\r\nW\r\no\r\nr\r\nl\r\nd\r\nL\r\nI\r\nN\r\nQ\r\n(space)\r\ni\r\ns\r\n(space)\r\ng\r\nr\r\ne\r\na\r\nt<\/code><\/span><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Real-world examples of data projection in C#:<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">Transforming a list of objects<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a list of <code>Person<\/code> objects, and you want to create a new list of <code>PersonInfo<\/code> objects containing only the names and ages of each person.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Address { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PersonInfo<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\nList&lt;Person&gt; people = <span class=\"hljs-keyword\">new<\/span> List&lt;Person&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Person { Name = <span class=\"hljs-string\">\"John\"<\/span>, Age = <span class=\"hljs-number\">30<\/span>, Address = <span class=\"hljs-string\">\"123 Main St\"<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Person { Name = <span class=\"hljs-string\">\"Jane\"<\/span>, Age = <span class=\"hljs-number\">28<\/span>, Address = <span class=\"hljs-string\">\"456 Oak St\"<\/span> },\r\n};\r\n\r\n<span class=\"hljs-keyword\">var<\/span> personInfos = people.Select(p =&gt; <span class=\"hljs-keyword\">new<\/span> PersonInfo { Name = p.Name, Age = p.Age });\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> personInfo <span class=\"hljs-keyword\">in<\/span> personInfos)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Name: <span class=\"hljs-subst\">{personInfo.Name}<\/span>, Age: <span class=\"hljs-subst\">{personInfo.Age}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h5 class=\"wp-block-heading\">Flattening a list of orders with multiple order items<\/h5>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Order<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> OrderId { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> List&lt;OrderItem&gt; Items { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">OrderItem<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> ProductId { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Quantity { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\nList&lt;Order&gt; orders = <span class=\"hljs-keyword\">new<\/span> List&lt;Order&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Order\r\n    {\r\n        OrderId = <span class=\"hljs-number\">1<\/span>,\r\n        Items = <span class=\"hljs-keyword\">new<\/span> List&lt;OrderItem&gt;\r\n        {\r\n            <span class=\"hljs-keyword\">new<\/span> OrderItem { ProductId = <span class=\"hljs-number\">101<\/span>, Quantity = <span class=\"hljs-number\">2<\/span> },\r\n            <span class=\"hljs-keyword\">new<\/span> OrderItem { ProductId = <span class=\"hljs-number\">102<\/span>, Quantity = <span class=\"hljs-number\">1<\/span> }\r\n        }\r\n    },\r\n    <span class=\"hljs-keyword\">new<\/span> Order\r\n    {\r\n        OrderId = <span class=\"hljs-number\">2<\/span>,\r\n        Items = <span class=\"hljs-keyword\">new<\/span> List&lt;OrderItem&gt;\r\n        {\r\n            <span class=\"hljs-keyword\">new<\/span> OrderItem { ProductId = <span class=\"hljs-number\">103<\/span>, Quantity = <span class=\"hljs-number\">3<\/span> },\r\n            <span class=\"hljs-keyword\">new<\/span> OrderItem { ProductId = <span class=\"hljs-number\">104<\/span>, Quantity = <span class=\"hljs-number\">4<\/span> }\r\n        }\r\n    },\r\n};\r\n\r\n<span class=\"hljs-comment\">\/\/ Flatten the list of orders into a single list of order items<\/span>\r\n<span class=\"hljs-keyword\">var<\/span> allOrderItems = orders.SelectMany(order =&gt; order.Items);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> orderItem <span class=\"hljs-keyword\">in<\/span> allOrderItems)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"ProductId: <span class=\"hljs-subst\">{orderItem.ProductId}<\/span>, Quantity: <span class=\"hljs-subst\">{orderItem.Quantity}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">ProductId<\/span>: 101, Quantity: 2\r\n<span class=\"hljs-attribute\">ProductId<\/span>: 102, Quantity: 1\r\n<span class=\"hljs-attribute\">ProductId<\/span>: 103, Quantity: 3\r\n<span class=\"hljs-attribute\">ProductId<\/span>: 104, Quantity: 4<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, the <code><strong>SelectMany<\/strong><\/code> method is used to flatten the hierarchical list of orders, each containing multiple order items, into a single list of order items. This is useful when you need to work with a flat structure for further processing or analysis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Filtering<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Filtering is an essential operation when working with collections of data. LINQ provides several methods for filtering data, such as Where, Take, Skip, and TakeWhile. In this section, we will explore these methods and how to use them to filter data effectively.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Leveraging Where, Take, Skip, and TakeWhile for data filtering:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Where: The<strong> <code>Where<\/code><\/strong> method is used to filter a collection based on a specified condition. It returns a new collection containing only the elements that satisfy the given condition.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> numbers = <span class=\"hljs-keyword\">new<\/span> List&lt;<span class=\"hljs-keyword\">int<\/span>&gt; { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n<span class=\"hljs-keyword\">var<\/span> evenNumbers = numbers.Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we use the <code><strong>Where<\/strong><\/code> method to filter out the even numbers from the list of integers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Take<\/strong>: The <code>Take<\/code> method returns a specified number of elements from the start of a collection.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> firstThreeNumbers = numbers.Take(<span class=\"hljs-number\">3<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we use the <code><strong>Take<\/strong><\/code> method to get the first three elements from the list of integers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Skip<\/strong>: The <code><strong>Skip<\/strong><\/code> method is used to bypass a specified number of elements in a collection and return the remaining elements.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> numbersAfterFirstThree = numbers.Skip(<span class=\"hljs-number\">3<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we use the <code><strong>Skip<\/strong><\/code> method to bypass the first three elements in the list of integers and return the remaining elements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>TakeWhile<\/strong>: The <code><strong>TakeWhile<\/strong><\/code> method returns elements from a collection as long as a specified condition is true. Once the condition is false, the method stops returning elements.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> numbersUntilFirstEven = numbers.TakeWhile(n =&gt; n % <span class=\"hljs-number\">2<\/span> != <span class=\"hljs-number\">0<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we use the <code>TakeWhile<\/code> method to get elements from the list of integers until the first even number is encountered.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Filtering with multiple conditions and compound operators:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">LINQ allows you to filter data using multiple conditions and compound operators such as &amp;&amp; (AND) and || (OR). To filter data based on multiple conditions, you can chain multiple <code>Where<\/code> clauses or use compound operators within a single <code>Where<\/code> clause.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> numbers = <span class=\"hljs-keyword\">new<\/span> List&lt;<span class=\"hljs-keyword\">int<\/span>&gt; { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">8<\/span>, <span class=\"hljs-number\">9<\/span>, <span class=\"hljs-number\">10<\/span> };\r\n\r\n<span class=\"hljs-comment\">\/\/ Using multiple Where clauses<\/span>\r\n<span class=\"hljs-keyword\">var<\/span> evenNumbersGreaterThanFive = numbers.Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>).Where(n =&gt; n &gt; <span class=\"hljs-number\">5<\/span>);\r\n\r\n<span class=\"hljs-comment\">\/\/ Using compound operators<\/span>\r\n<span class=\"hljs-keyword\">var<\/span> evenNumbersGreaterThanFive2 = numbers.Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span> &amp;&amp; n &gt; <span class=\"hljs-number\">5<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we filter the list of integers to get even numbers greater than five. In the first approach, we chain two <code>Where<\/code> clauses, while in the second approach, we use the &amp;&amp; operator within a single <code>Where<\/code> clause to combine the conditions. Both approaches produce the same result.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sorting<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sorting is an essential operation when working with data, as it allows you to organize and present information in a meaningful order. LINQ provides a set of powerful methods for sorting data based on specific criteria.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ordering data using OrderBy, OrderByDescending, ThenBy, and ThenByDescending<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>OrderBy<\/strong>: This method is used to sort a collection in ascending order based on a specified key. It takes a delegate or lambda expression as an argument, which defines the key selector function.<\/li>\n\n\n\n<li><strong>OrderByDescending<\/strong>: This method is used to sort a collection in descending order based on a specified key. Like OrderBy, it takes a delegate or lambda expression as an argument.<\/li>\n\n\n\n<li><strong>ThenBy<\/strong>: This method is used in conjunction with OrderBy or OrderByDescending to apply secondary sorting criteria when the primary sorting key has duplicate values.<\/li>\n\n\n\n<li><strong>ThenByDescending<\/strong>: This method is used in conjunction with OrderBy or OrderByDescending to apply secondary sorting criteria in descending order.<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">decimal<\/span> Salary { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\nList&lt;Employee&gt; employees = <span class=\"hljs-keyword\">new<\/span> List&lt;Employee&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"John\"<\/span>, Age = <span class=\"hljs-number\">30<\/span>, Salary = <span class=\"hljs-number\">5000<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Jane\"<\/span>, Age = <span class=\"hljs-number\">28<\/span>, Salary = <span class=\"hljs-number\">5000<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Bob\"<\/span>, Age = <span class=\"hljs-number\">35<\/span>, Salary = <span class=\"hljs-number\">6000<\/span> },\r\n};\r\n\r\n<span class=\"hljs-comment\">\/\/ Sort employees by salary in ascending order and then by age in descending order<\/span>\r\n<span class=\"hljs-keyword\">var<\/span> sortedEmployees = employees\r\n    .OrderBy(e =&gt; e.Salary)\r\n    .ThenByDescending(e =&gt; e.Age);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> sortedEmployees)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Name: <span class=\"hljs-subst\">{employee.Name}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>, Salary: <span class=\"hljs-subst\">{employee.Salary}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Name<\/span>: Jane, Age: 28, Salary: 5000\r\n<span class=\"hljs-attribute\">Name<\/span>: John, Age: 30, Salary: 5000\r\n<span class=\"hljs-attribute\">Name<\/span>: Bob, Age: 35, Salary: 6000<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Custom sorting with IComparer and IComparable interfaces<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">When you need to sort objects based on custom logic, you can implement the IComparer&lt;T&gt; or IComparable&lt;T&gt; interfaces to define custom sorting behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>IComparable&lt;T><\/strong>: Implement this interface on the class you want to sort, and provide a custom comparison method for comparing instances of the class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">public class Employee : IComparable<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Employee<\/span>&gt;<\/span>\r\n{\r\n    public string Name { get; set; }\r\n    public int Age { get; set; }\r\n\r\n    public int CompareTo(Employee other)\r\n    {\r\n        if (other == null) return 1;\r\n\r\n        \/\/ Custom sorting logic: sort by name length\r\n        return this.Name.Length.CompareTo(other.Name.Length);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then, you can use the OrderBy or OrderByDescending methods without specifying a key selector:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> sortedEmployees = employees.OrderBy(e =&gt; e);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>IComparer&lt;T><\/strong>: Implement this interface to create a separate comparison class, which can be used to sort instances of another class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">EmployeeNameLengthComparer<\/span> : <span class=\"hljs-title\">IComparer<\/span>&lt;<span class=\"hljs-title\">Employee<\/span>&gt;\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">Compare<\/span>(<span class=\"hljs-params\">Employee x, Employee y<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">if<\/span> (x == <span class=\"hljs-literal\">null<\/span>) <span class=\"hljs-keyword\">return<\/span> y == <span class=\"hljs-literal\">null<\/span> ? <span class=\"hljs-number\">0<\/span> : <span class=\"hljs-number\">-1<\/span>;\r\n        <span class=\"hljs-keyword\">if<\/span> (y == <span class=\"hljs-literal\">null<\/span>) <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">1<\/span>;\r\n\r\n        <span class=\"hljs-comment\">\/\/ Custom sorting logic: sort by name length<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> x.Name.Length.CompareTo(y.Name.Length);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">To use the custom comparer, you can pass an instance of it to the <code><strong>OrderBy<\/strong><\/code> or <code><strong>OrderByDescending<\/strong><\/code> methods:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">List&lt;Employee&gt; employees = <span class=\"hljs-keyword\">new<\/span> List&lt;Employee&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"John\"<\/span>, Age = <span class=\"hljs-number\">30<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Jane\"<\/span>, Age = <span class=\"hljs-number\">28<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Bob\"<\/span>, Age = <span class=\"hljs-number\">35<\/span> },\r\n};\r\n\r\nEmployeeNameLengthComparer nameLengthComparer = <span class=\"hljs-keyword\">new<\/span> EmployeeNameLengthComparer();\r\n<span class=\"hljs-keyword\">var<\/span> sortedEmployees = employees.OrderBy(e =&gt; e, nameLengthComparer);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> sortedEmployees)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Name: <span class=\"hljs-subst\">{employee.Name}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">Name: Bob, Age: <span class=\"hljs-number\">35<\/span>\r\nName: John, Age: <span class=\"hljs-number\">30<\/span>\r\nName: Jane, Age: <span class=\"hljs-number\">28<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, the <code><strong>EmployeeNameLengthComparer<\/strong><\/code> class implements the <code><strong>IComparer&lt;Employee><\/strong><\/code> interface, defining custom sorting logic based on the length of the employee&#8217;s name. This custom comparer is then used in the <code><strong>OrderBy<\/strong><\/code> method to sort the list of employees.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grouping<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Grouping is a powerful operation that allows you to organize data into groups based on a specified key. This can be useful when you need to analyze or process data in a more structured way, such as aggregating values within each group.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Grouping data with GroupBy and ToLookup<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GroupBy<\/strong>: The <code><strong>GroupBy<\/strong><\/code> method is used to group elements of a collection based on a specified key. It takes a delegate or lambda expression as an argument, which defines the key selector function. The method returns an <code><strong>IEnumerable&lt;IGrouping&lt;TKey, TElement>><\/strong><\/code>, where each <code><strong>IGrouping<\/strong><\/code> object contains a key and a collection of elements that share the same key.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">List&lt;Employee&gt; employees = <span class=\"hljs-keyword\">new<\/span> List&lt;Employee&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"John\"<\/span>, Age = <span class=\"hljs-number\">30<\/span>, Department = <span class=\"hljs-string\">\"HR\"<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Jane\"<\/span>, Age = <span class=\"hljs-number\">28<\/span>, Department = <span class=\"hljs-string\">\"HR\"<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Bob\"<\/span>, Age = <span class=\"hljs-number\">35<\/span>, Department = <span class=\"hljs-string\">\"IT\"<\/span> },\r\n};\r\n\r\n<span class=\"hljs-keyword\">var<\/span> groupedEmployees = employees.GroupBy(e =&gt; e.Department);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> <span class=\"hljs-keyword\">group<\/span> <span class=\"hljs-keyword\">in<\/span> groupedEmployees)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Department: <span class=\"hljs-subst\">{<span class=\"hljs-keyword\">group<\/span>.Key}<\/span>\"<\/span>);\r\n    <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-keyword\">group<\/span>)\r\n    {\r\n        Console.WriteLine(<span class=\"hljs-string\">$\"  Name: <span class=\"hljs-subst\">{employee.Name}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>\"<\/span>);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Department: HR\r\n  Name: John, Age: 30\r\n  Name: Jane, Age: 28\r\nDepartment: IT\r\n  Name: Bob, Age: 35<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>ToLookup<\/strong>: The <code><strong>ToLookup<\/strong><\/code> method is similar to <code><strong>GroupBy<\/strong><\/code>, but it returns an <code><strong>ILookup&lt;TKey, TElement><\/strong><\/code> instead of an <code><strong>IEnumerable&lt;IGrouping&lt;TKey, TElement>><\/strong><\/code>. The main difference is that <code><strong>ILookup<\/strong><\/code> is optimized for multiple lookups, as it stores the grouped data in a dictionary-like structure.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> employeeLookup = employees.ToLookup(e =&gt; e.Department);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> <span class=\"hljs-keyword\">group<\/span> <span class=\"hljs-keyword\">in<\/span> employeeLookup)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Department: <span class=\"hljs-subst\">{<span class=\"hljs-keyword\">group<\/span>.Key}<\/span>\"<\/span>);\r\n    <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-keyword\">group<\/span>)\r\n    {\r\n        Console.WriteLine(<span class=\"hljs-string\">$\"  Name: <span class=\"hljs-subst\">{employee.Name}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>\"<\/span>);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Working with hierarchical data structures<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Grouping can be particularly useful when working with hierarchical data structures, such as trees or nested collections. You can use the <code><strong>GroupBy<\/strong><\/code> method in combination with other LINQ operations to create more complex queries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a list of <code>Product<\/code> objects, each having a <code><strong>Category<\/strong><\/code> property. You want to group the products by category and calculate the total price for each category.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Product<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Category { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">decimal<\/span> Price { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\nList&lt;Product&gt; products = <span class=\"hljs-keyword\">new<\/span> List&lt;Product&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Product { Name = <span class=\"hljs-string\">\"Laptop\"<\/span>, Category = <span class=\"hljs-string\">\"Electronics\"<\/span>, Price = <span class=\"hljs-number\">1000<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Product { Name = <span class=\"hljs-string\">\"Keyboard\"<\/span>, Category = <span class=\"hljs-string\">\"Electronics\"<\/span>, Price = <span class=\"hljs-number\">50<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Product { Name = <span class=\"hljs-string\">\"Chair\"<\/span>, Category = <span class=\"hljs-string\">\"Furniture\"<\/span>, Price = <span class=\"hljs-number\">200<\/span> },\r\n};\r\n\r\n<span class=\"hljs-keyword\">var<\/span> groupedProducts = products.GroupBy(p =&gt; p.Category);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> <span class=\"hljs-keyword\">group<\/span> <span class=\"hljs-keyword\">in<\/span> groupedProducts)\r\n{\r\n    <span class=\"hljs-keyword\">decimal<\/span> totalPrice = <span class=\"hljs-keyword\">group<\/span>.Sum(p =&gt; p.Price);\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Category: <span class=\"hljs-subst\">{<span class=\"hljs-keyword\">group<\/span>.Key}<\/span>, Total Price: <span class=\"hljs-subst\">{totalPrice}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Category<\/span>: Electronics, Total Price: 1050\r\n<span class=\"hljs-attribute\">Category<\/span>: Furniture, Total Price: 200<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, the <code>GroupBy<\/code> method is used to group the products by category, and the <code>Sum<\/code> method is then used to calculate the total price of all products in each category.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This demonstrates how grouping can be combined with other LINQ operations to process hierarchical data structures and perform complex queries. It&#8217;s important to note that you can also perform multiple levels of grouping if your data requires further categorization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For instance, if the <code>Product<\/code> class also had a <code>Subcategory<\/code> property, you could group products by <code>Category<\/code>, then by <code>Subcategory<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> groupedProductsByCategoryAndSubcategory = products\r\n    .GroupBy(p =&gt; p.Category)\r\n    .Select(g =&gt; <span class=\"hljs-keyword\">new<\/span>\r\n    {\r\n        Category = g.Key,\r\n        Subcategories = g.GroupBy(p =&gt; p.Subcategory)\r\n    });\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> categoryGroup <span class=\"hljs-keyword\">in<\/span> groupedProductsByCategoryAndSubcategory)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Category: <span class=\"hljs-subst\">{categoryGroup.Category}<\/span>\"<\/span>);\r\n    <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> subcategoryGroup <span class=\"hljs-keyword\">in<\/span> categoryGroup.Subcategories)\r\n    {\r\n        <span class=\"hljs-keyword\">decimal<\/span> totalPrice = subcategoryGroup.Sum(p =&gt; p.Price);\r\n        Console.WriteLine(<span class=\"hljs-string\">$\"  Subcategory: <span class=\"hljs-subst\">{subcategoryGroup.Key}<\/span>, Total Price: <span class=\"hljs-subst\">{totalPrice}<\/span>\"<\/span>);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Set operations<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Set operations are essential when working with collections, as they allow you to combine, compare, and manipulate data sets effectively. LINQ provides several methods for performing set operations on collections.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Union, Intersect, and Except methods for combining and comparing data sets<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Union<\/strong>: The <code><strong>Union<\/strong><\/code> method returns a collection that contains the distinct elements from two input collections. It removes duplicates and combines the elements from both collections.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">int<\/span>&#91;] set1 = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n<span class=\"hljs-keyword\">int<\/span>&#91;] set2 = { <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">8<\/span> };\r\n\r\n<span class=\"hljs-keyword\">var<\/span> union = set1.Union(set2);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> item <span class=\"hljs-keyword\">in<\/span> union)\r\n{\r\n    Console.Write(<span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{item}<\/span> \"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">1 2 3 4 5 6 7 8\r<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Intersect<\/strong>: The <code><strong>Intersect<\/strong><\/code> method returns a collection that contains the common elements from two input collections. It only includes elements that are present in both collections.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">int<\/span>&#91;] set1 = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n<span class=\"hljs-keyword\">int<\/span>&#91;] set2 = { <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">8<\/span> };\r\n\r\n<span class=\"hljs-keyword\">var<\/span> intersection = set1.Intersect(set2);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> item <span class=\"hljs-keyword\">in<\/span> intersection)\r\n{\r\n    Console.Write(<span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{item}<\/span> \"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">4 5<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Except<\/strong>: The <code><strong>Except<\/strong><\/code> method returns a collection that contains elements from the first collection that are not present in the second collection.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">int&#91;] set1 = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\nint&#91;] set2 = { <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">8<\/span> };\r\n\r\n<span class=\"hljs-keyword\">var<\/span> difference = set1.Except(set2);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> item in difference)\r\n{\r\n    Console.Write($<span class=\"hljs-string\">\"{item} \"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">1 2 3<\/code><\/span><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Handling duplicates and custom equality comparisons<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">When working with complex objects, you may need to handle duplicates and define custom equality comparisons for set operations. To do this, you can implement the <code><strong>IEqualityComparer&lt;T><\/strong><\/code> interface in a separate class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">EmployeeNameEqualityComparer<\/span> : <span class=\"hljs-title\">IEqualityComparer<\/span>&lt;<span class=\"hljs-title\">Employee<\/span>&gt;\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">bool<\/span> <span class=\"hljs-title\">Equals<\/span>(<span class=\"hljs-params\">Employee x, Employee y<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">return<\/span> x.Name.Equals(y.Name, StringComparison.OrdinalIgnoreCase);\r\n    }\r\n\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">GetHashCode<\/span>(<span class=\"hljs-params\">Employee obj<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">return<\/span> obj.Name.GetHashCode();\r\n    }\r\n}\r\n\r\nList&lt;Employee&gt; employees1 = <span class=\"hljs-keyword\">new<\/span> List&lt;Employee&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"John\"<\/span>, Age = <span class=\"hljs-number\">30<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Jane\"<\/span>, Age = <span class=\"hljs-number\">28<\/span> },\r\n};\r\n\r\nList&lt;Employee&gt; employees2 = <span class=\"hljs-keyword\">new<\/span> List&lt;Employee&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"John\"<\/span>, Age = <span class=\"hljs-number\">32<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Employee { Name = <span class=\"hljs-string\">\"Bob\"<\/span>, Age = <span class=\"hljs-number\">35<\/span> },\r\n};\r\n\r\nEmployeeNameEqualityComparer comparer = <span class=\"hljs-keyword\">new<\/span> EmployeeNameEqualityComparer();\r\n<span class=\"hljs-keyword\">var<\/span> union = employees1.Union(employees2, comparer);\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> union)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Name: <span class=\"hljs-subst\">{employee.Name}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Name<\/span>: John, Age: 30\r\n<span class=\"hljs-attribute\">Name<\/span>: Jane, Age: 28\r\n<span class=\"hljs-attribute\">Name<\/span>: Bob, Age: 35<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, the <code><strong>EmployeeNameEqualityComparer<\/strong><\/code> class implements the <code><strong>IEqualityComparer&lt;Employee><\/strong><\/code> interface, defining custom equality comparisons based on the employee&#8217;s name. This custom comparer is then used in the <code><strong>Union<\/strong><\/code> method to handle duplicates and combine two collections of employees based on their names.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Aggregation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aggregation methods are useful for summarizing and analyzing data in collections. LINQ provides several methods for performing common aggregation operations on collections.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Sum, Min, Max, Average, and Aggregate methods for data aggregation:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sum<\/strong>: The <code><strong>Sum<\/strong><\/code> method calculates the sum of a collection of numeric values.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">int<\/span>&#91;] numbers = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\n<span class=\"hljs-keyword\">int<\/span> sum = numbers.Sum();\r\n\r\nConsole.WriteLine(<span class=\"hljs-string\">$\"Sum: <span class=\"hljs-subst\">{sum}<\/span>\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Sum<\/span>: 15<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Min<\/strong>: The <code><strong>Min<\/strong><\/code> method returns the minimum value in a collection.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">int<\/span>&#91;] numbers = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\n<span class=\"hljs-keyword\">int<\/span> min = numbers.Min();\r\n\r\nConsole.WriteLine(<span class=\"hljs-string\">$\"Min: <span class=\"hljs-subst\">{min}<\/span>\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Min<\/span>: 1<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Max<\/strong>: The <code><strong>Max<\/strong><\/code> method returns the maximum value in a collection.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">int<\/span>&#91;] numbers = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\n<span class=\"hljs-keyword\">int<\/span> max = numbers.Max();\r\n\r\nConsole.WriteLine(<span class=\"hljs-string\">$\"Max: <span class=\"hljs-subst\">{max}<\/span>\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Max<\/span>: 5<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Average<\/strong>: The <code><strong>Average<\/strong><\/code> method calculates the average value of a collection of numeric values.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">int&#91;] numbers = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\ndouble average = numbers.Average();\r\n\r\nConsole.WriteLine($<span class=\"hljs-string\">\"Average: {average}\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-37\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Average<\/span>: 3<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Aggregate<\/strong>: The <code><strong>Aggregate<\/strong><\/code> method applies an accumulator function over a collection, reducing the elements to a single value. It is a more generic aggregation method that can be used to implement custom aggregation logic.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-39\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">int<\/span>&#91;] numbers = { <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span> };\r\n\r\n<span class=\"hljs-keyword\">int<\/span> product = numbers.Aggregate((a, b) =&gt; a * b);\r\n\r\nConsole.WriteLine(<span class=\"hljs-string\">$\"Product: <span class=\"hljs-subst\">{product}<\/span>\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-40\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Product<\/span>: 120<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-40\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Custom aggregation functions:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">You can use the <code><strong>Aggregate<\/strong><\/code> method to implement custom aggregation functions that are not provided by the standard LINQ methods.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a list of <code>Product<\/code> objects, and you want to calculate the total price of all products.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-41\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Product<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">decimal<\/span> Price { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}\r\n\r\nList&lt;Product&gt; products = <span class=\"hljs-keyword\">new<\/span> List&lt;Product&gt;\r\n{\r\n    <span class=\"hljs-keyword\">new<\/span> Product { Name = <span class=\"hljs-string\">\"Laptop\"<\/span>, Price = <span class=\"hljs-number\">1000<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Product { Name = <span class=\"hljs-string\">\"Keyboard\"<\/span>, Price = <span class=\"hljs-number\">50<\/span> },\r\n    <span class=\"hljs-keyword\">new<\/span> Product { Name = <span class=\"hljs-string\">\"Chair\"<\/span>, Price = <span class=\"hljs-number\">200<\/span> },\r\n};\r\n\r\n<span class=\"hljs-keyword\">decimal<\/span> totalPrice = products.Aggregate(<span class=\"hljs-number\">0<\/span>M, (sum, product) =&gt; sum + product.Price);\r\n\r\nConsole.WriteLine(<span class=\"hljs-string\">$\"Total Price: <span class=\"hljs-subst\">{totalPrice}<\/span>\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-41\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Total Price: 1250<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, the <code><strong>Aggregate<\/strong><\/code> method is used to calculate the total price of all products in the collection. The custom aggregation function adds the price of each product to a running total, eventually returning the final total price.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Query Syntax vs Method Syntax<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">LINQ provides two ways to write queries: query syntax and method syntax. Both syntaxes are equivalent in terms of functionality, but they have different styles and use cases.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comparison of LINQ&#8217;s query syntax and method syntax:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Query syntax:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resembles SQL and is more declarative.<\/li>\n\n\n\n<li>Easier to read and write for complex queries with multiple operations, such as filtering, sorting, and grouping.<\/li>\n\n\n\n<li>Limited in terms of available operations compared to method syntax.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-42\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> result = <span class=\"hljs-keyword\">from<\/span> n <span class=\"hljs-keyword\">in<\/span> numbers\r\n             <span class=\"hljs-keyword\">where<\/span> n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>\r\n             <span class=\"hljs-keyword\">orderby<\/span> n <span class=\"hljs-keyword\">descending<\/span>\r\n             <span class=\"hljs-keyword\">select<\/span> n;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-42\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Method syntax:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses extension methods and lambda expressions.<\/li>\n\n\n\n<li>More flexible and powerful than query syntax, as it can use any LINQ extension method.<\/li>\n\n\n\n<li>Can be more concise for simple queries or when chaining multiple operations.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-43\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> result = numbers.Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>).OrderByDescending(n =&gt; n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-43\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Choosing the right syntax for specific scenarios:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For simple queries or when chaining multiple operations, method syntax is often more concise and easier to read.<\/li>\n\n\n\n<li>For complex queries with multiple operations, such as filtering, sorting, and grouping, query syntax can be more readable and maintainable.<\/li>\n\n\n\n<li>In some cases, a combination of both syntaxes can provide the best balance of readability and flexibility.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Converting between query syntax and method syntax:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can easily convert between query syntax and method syntax, as they are interchangeable in terms of functionality. Here are two examples of equivalent queries written in both syntaxes:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Filtering and sorting:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Query syntax:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-44\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> result = <span class=\"hljs-keyword\">from<\/span> n <span class=\"hljs-keyword\">in<\/span> numbers\r\n             <span class=\"hljs-keyword\">where<\/span> n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>\r\n             <span class=\"hljs-keyword\">orderby<\/span> n <span class=\"hljs-keyword\">descending<\/span>\r\n             <span class=\"hljs-keyword\">select<\/span> n;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-44\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Method syntax:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> result = numbers.Where(<span class=\"hljs-function\"><span class=\"hljs-params\">n<\/span> =&gt;<\/span> n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>).OrderByDescending(<span class=\"hljs-function\"><span class=\"hljs-params\">n<\/span> =&gt;<\/span> n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-45\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Grouping and aggregation:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Query syntax:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-46\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> result = <span class=\"hljs-keyword\">from<\/span> p <span class=\"hljs-keyword\">in<\/span> products\r\n             group p by p.Category into g\r\n             select <span class=\"hljs-keyword\">new<\/span> { Category = g.Key, TotalPrice = g.Sum(<span class=\"hljs-function\"><span class=\"hljs-params\">p<\/span> =&gt;<\/span> p.Price) };<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-46\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Method syntax:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-47\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> result = products.GroupBy(<span class=\"hljs-function\"><span class=\"hljs-params\">p<\/span> =&gt;<\/span> p.Category)\r\n                     .Select(<span class=\"hljs-function\"><span class=\"hljs-params\">g<\/span> =&gt;<\/span> <span class=\"hljs-keyword\">new<\/span> { Category = g.Key, TotalPrice = g.Sum(<span class=\"hljs-function\"><span class=\"hljs-params\">p<\/span> =&gt;<\/span> p.Price) });<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-47\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In summary, both query syntax and method syntax have their advantages and are suitable for different scenarios. Choose the syntax that best fits the specific requirements of your query and provides the best balance of readability and flexibility.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LINQ to XML<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">LINQ to XML is a powerful feature that allows developers to work with XML data using LINQ queries. It provides a set of classes and methods for creating, querying, and modifying XML documents in a more efficient, readable, and expressive manner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Introduction to LINQ to XML and its benefits:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LINQ to XML is part of the System.Xml.Linq namespace and is built on top of the LINQ framework.<\/li>\n\n\n\n<li>Provides a more convenient and intuitive way to work with XML data compared to traditional XML APIs, such as XmlDocument and XmlReader.<\/li>\n\n\n\n<li>Enables developers to write complex XML queries using familiar LINQ syntax and techniques.<\/li>\n\n\n\n<li>Offers improved performance and memory management compared to traditional XML APIs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Creating, querying, and modifying XML documents using LINQ:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Creating XML documents:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">You can create XML documents using the XElement and XAttribute classes.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-48\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">XElement employees = <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Employees\"<\/span>,\r\n    <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Employee\"<\/span>,\r\n        <span class=\"hljs-keyword\">new<\/span> XAttribute(<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-number\">1<\/span>),\r\n        <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Name\"<\/span>, <span class=\"hljs-string\">\"John\"<\/span>),\r\n        <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Age\"<\/span>, <span class=\"hljs-number\">30<\/span>)\r\n    ),\r\n    <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Employee\"<\/span>,\r\n        <span class=\"hljs-keyword\">new<\/span> XAttribute(<span class=\"hljs-string\">\"Id\"<\/span>, <span class=\"hljs-number\">2<\/span>),\r\n        <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Name\"<\/span>, <span class=\"hljs-string\">\"Jane\"<\/span>),\r\n        <span class=\"hljs-keyword\">new<\/span> XElement(<span class=\"hljs-string\">\"Age\"<\/span>, <span class=\"hljs-number\">28<\/span>)\r\n    )\r\n);\r\n\r\nConsole.WriteLine(employees);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-48\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-49\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">&lt;Employees&gt;\r\n  &lt;Employee Id=<span class=\"hljs-string\">\"1\"<\/span>&gt;\r\n    &lt;Name&gt;John&lt;\/Name&gt;\r\n    &lt;Age&gt;<span class=\"hljs-number\">30<\/span>&lt;\/Age&gt;\r\n  &lt;\/Employee&gt;\r\n  &lt;Employee Id=<span class=\"hljs-string\">\"2\"<\/span>&gt;\r\n    &lt;Name&gt;Jane&lt;\/Name&gt;\r\n    &lt;Age&gt;<span class=\"hljs-number\">28<\/span>&lt;\/Age&gt;\r\n  &lt;\/Employee&gt;\r\n&lt;\/Employees&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-49\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Querying XML documents:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">You can query XML documents using LINQ queries in a similar way to querying collections.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-50\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">IEnumerable&lt;XElement&gt; youngEmployees = employees.Elements(<span class=\"hljs-string\">\"Employee\"<\/span>)\r\n                                                .Where(<span class=\"hljs-function\"><span class=\"hljs-params\">e<\/span> =&gt;<\/span> (int)e.Element(<span class=\"hljs-string\">\"Age\"<\/span>) &lt; <span class=\"hljs-number\">30<\/span>);\r\n\r\nforeach (XElement employee <span class=\"hljs-keyword\">in<\/span> youngEmployees)\r\n{\r\n    Console.WriteLine(employee);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-50\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-51\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Employee<\/span> <span class=\"hljs-attr\">Id<\/span>=<span class=\"hljs-string\">\"2\"<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Name<\/span>&gt;<\/span>Jane<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Name<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Age<\/span>&gt;<\/span>28<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Age<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Employee<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-51\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Modifying XML documents:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">You can modify XML documents using the XElement and XAttribute classes&#8217; methods and properties.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-52\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">XElement employeeToUpdate = employees.Elements(<span class=\"hljs-string\">\"Employee\"<\/span>)\r\n                                     .FirstOrDefault(e =&gt; (<span class=\"hljs-keyword\">int<\/span>)e.Attribute(<span class=\"hljs-string\">\"Id\"<\/span>) == <span class=\"hljs-number\">2<\/span>);\r\n\r\n<span class=\"hljs-keyword\">if<\/span> (employeeToUpdate != <span class=\"hljs-literal\">null<\/span>)\r\n{\r\n    employeeToUpdate.SetElementValue(<span class=\"hljs-string\">\"Age\"<\/span>, <span class=\"hljs-number\">29<\/span>);\r\n}\r\n\r\nConsole.WriteLine(employees);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-52\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-53\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Employees<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Employee<\/span> <span class=\"hljs-attr\">Id<\/span>=<span class=\"hljs-string\">\"1\"<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Name<\/span>&gt;<\/span>John<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Name<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Age<\/span>&gt;<\/span>30<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Age<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Employee<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Employee<\/span> <span class=\"hljs-attr\">Id<\/span>=<span class=\"hljs-string\">\"2\"<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Name<\/span>&gt;<\/span>Jane<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Name<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Age<\/span>&gt;<\/span>29<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Age<\/span>&gt;<\/span>\r\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Employee<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Employees<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-53\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Combining LINQ to XML with other LINQ techniques:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LINQ to XML can be combined with other LINQ techniques, such as projection, sorting, and aggregation, to perform more advanced XML data manipulation tasks.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-54\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">var<\/span> employeeInfo = employees.Elements(<span class=\"hljs-string\">\"Employee\"<\/span>)\r\n                             .OrderBy(e =&gt; (<span class=\"hljs-keyword\">string<\/span>)e.Element(<span class=\"hljs-string\">\"Name\"<\/span>))\r\n                             .Select(e =&gt; <span class=\"hljs-keyword\">new<\/span>\r\n                             {\r\n                                 Id = (<span class=\"hljs-keyword\">int<\/span>)e.Attribute(<span class=\"hljs-string\">\"Id\"<\/span>),\r\n                                 Name = (<span class=\"hljs-keyword\">string<\/span>)e.Element(<span class=\"hljs-string\">\"Name\"<\/span>),\r\n                                 Age = (<span class=\"hljs-keyword\">int<\/span>)e.Element(<span class=\"hljs-string\">\"Age\"<\/span>)\r\n                             });\r\n\r\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> employeeInfo)\r\n{\r\n    Console.WriteLine(<span class=\"hljs-string\">$\"Id: <span class=\"hljs-subst\">{employee.Id}<\/span>, Name: <span class=\"hljs-subst\">{employee.Name}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>\"<\/span>);\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-54\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-55\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Id<\/span>: 2, Name: Jane, Age: 29\r\n<span class=\"hljs-attribute\">Id<\/span>: 1, Name: John, Age: 30<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-55\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, LINQ to XML is used to query the XML data, sort the employees by their names, and project the data into a new anonymous type. This demonstrates how LINQ to XML can be effectively combined with other LINQ techniques for more advanced data manipulation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LINQ to SQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">LINQ to SQL is an Object-Relational Mapping (ORM) framework provided by Microsoft that allows developers to work with relational databases using LINQ queries. It enables developers to query, insert, update, and delete data from a database in a type-safe and efficient manner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Overview of LINQ to SQL and its advantages:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LINQ to SQL is part of the System.Data.Linq namespace and is built on top of the LINQ framework.<\/li>\n\n\n\n<li>Provides a more convenient and intuitive way to work with relational databases compared to traditional ADO.NET.<\/li>\n\n\n\n<li>Enables developers to write complex database queries using familiar LINQ syntax and techniques.<\/li>\n\n\n\n<li>Offers compile-time checking of queries and support for database transactions.<\/li>\n\n\n\n<li>Automatically generates and manages the SQL code needed to interact with the database.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Setting up a database connection and mapping database objects:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To work with LINQ to SQL, you first need to set up a connection to your database and create classes that map to your database objects (tables, views, and stored procedures).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add a reference to the System.Data.Linq assembly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create a DataContext class that represents the database connection. You can use the &#8220;connection string&#8221; to connect to your database.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-56\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyDatabaseContext<\/span> : <span class=\"hljs-title\">DataContext<\/span>\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">MyDatabaseContext<\/span>(<span class=\"hljs-params\"><span class=\"hljs-keyword\">string<\/span> connectionString<\/span>) : <span class=\"hljs-title\">base<\/span>(<span class=\"hljs-params\">connectionString<\/span>)<\/span> { }\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> Table&lt;Employee&gt; Employees =&gt; GetTable&lt;Employee&gt;();\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-56\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create classes that represent your database objects (e.g., tables). These classes should be decorated with the appropriate LINQ to SQL attributes.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-57\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\">&#91;<span class=\"hljs-meta\">Table(Name = <span class=\"hljs-meta-string\">\"Employees\"<\/span>)<\/span>]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span>\r\n{\r\n    &#91;<span class=\"hljs-meta\">Column(IsPrimaryKey = true, IsDbGenerated = true)<\/span>]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Id { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    &#91;<span class=\"hljs-meta\">Column(Name = <span class=\"hljs-meta-string\">\"FirstName\"<\/span>)<\/span>]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> FirstName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    &#91;<span class=\"hljs-meta\">Column(Name = <span class=\"hljs-meta-string\">\"LastName\"<\/span>)<\/span>]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> LastName { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    &#91;<span class=\"hljs-meta\">Column(Name = <span class=\"hljs-meta-string\">\"Age\"<\/span>)<\/span>]\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-57\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Querying, inserting, updating, and deleting data using LINQ to SQL:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Querying data:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">You can query data from the database using LINQ queries.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-58\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> (<span class=\"hljs-keyword\">var<\/span> db = <span class=\"hljs-keyword\">new<\/span> MyDatabaseContext(connectionString))\r\n{\r\n    <span class=\"hljs-keyword\">var<\/span> youngEmployees = db.Employees.Where(e =&gt; e.Age &lt; <span class=\"hljs-number\">30<\/span>);\r\n\r\n    <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> employee <span class=\"hljs-keyword\">in<\/span> youngEmployees)\r\n    {\r\n        Console.WriteLine(<span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{employee.FirstName}<\/span> <span class=\"hljs-subst\">{employee.LastName}<\/span>, Age: <span class=\"hljs-subst\">{employee.Age}<\/span>\"<\/span>);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-58\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Inserting data:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To insert new data into the database, create a new instance of the corresponding class and add it to the appropriate Table&lt;TEntity&gt; property of the DataContext class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-59\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> (<span class=\"hljs-keyword\">var<\/span> db = <span class=\"hljs-keyword\">new<\/span> MyDatabaseContext(connectionString))\r\n{\r\n    <span class=\"hljs-keyword\">var<\/span> newEmployee = <span class=\"hljs-keyword\">new<\/span> Employee { FirstName = <span class=\"hljs-string\">\"John\"<\/span>, LastName = <span class=\"hljs-string\">\"Doe\"<\/span>, Age = <span class=\"hljs-number\">25<\/span> };\r\n\r\n    db.Employees.InsertOnSubmit(newEmployee);\r\n    db.SubmitChanges();\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-59\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Updating data:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To update existing data in the database, retrieve the object you want to update, modify its properties, and call the SubmitChanges method on the DataContext class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-60\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> (<span class=\"hljs-keyword\">var<\/span> db = <span class=\"hljs-keyword\">new<\/span> MyDatabaseContext(connectionString))\r\n{\r\n    <span class=\"hljs-keyword\">var<\/span> employeeToUpdate = db.Employees.FirstOrDefault(e =&gt; e.Id == <span class=\"hljs-number\">1<\/span>);\r\n\r\n    <span class=\"hljs-keyword\">if<\/span> (employeeToUpdate != <span class=\"hljs-literal\">null<\/span>)\r\n    {\r\n        employeeToUpdate.Age = <span class=\"hljs-number\">30<\/span>;\r\n        db.SubmitChanges();\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-60\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Deleting data:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To delete data from the database, retrieve the object you want to delete, and call the DeleteOnSubmit method on the appropriate Table&lt;TEntity> property of the DataContext class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-61\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> (<span class=\"hljs-keyword\">var<\/span> db = <span class=\"hljs-keyword\">new<\/span> MyDatabaseContext(connectionString))\r\n{\r\n    <span class=\"hljs-keyword\">var<\/span> employeeToDelete = db.Employees.FirstOrDefault(e =&gt; e.Id == <span class=\"hljs-number\">1<\/span>);\r\n\r\n    <span class=\"hljs-keyword\">if<\/span> (employeeToDelete != <span class=\"hljs-literal\">null<\/span>)\r\n    {\r\n        db.Employees.DeleteOnSubmit(employeeToDelete);\r\n        db.SubmitChanges();\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-61\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we retrieve the employee with an Id of 1 from the database, and if found, delete the employee by calling the <code><strong>DeleteOnSubmit<\/strong><\/code> method on the <code><strong>Employees<\/strong><\/code> table property of the <code><strong>MyDatabaseContext<\/strong><\/code> class. Finally, we call <code><strong>SubmitChanges<\/strong><\/code> to persist the changes to the database.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LINQ with Parallel Programming<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Parallelism is becoming increasingly important in modern applications as processors continue to add more cores. By using parallel programming techniques, developers can better utilize available resources and improve the performance of their applications, especially when dealing with large data sets or computationally-intensive tasks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The importance of parallelism in modern applications:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Better utilization of multi-core processors and available hardware resources.<\/li>\n\n\n\n<li>Improved performance by executing tasks concurrently, reducing overall processing time.<\/li>\n\n\n\n<li>Enhanced responsiveness of applications, especially for tasks that can be parallelized.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Using PLINQ (Parallel LINQ) for concurrent data processing:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Parallel LINQ (PLINQ) is a parallel programming feature provided by the .NET framework that extends LINQ to enable developers to process data concurrently. PLINQ is part of the System.Linq.Parallel namespace and can be used to parallelize LINQ queries with minimal code changes.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-62\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System.Linq;\r\n<span class=\"hljs-keyword\">using<\/span> System.Linq.Parallel;\r\n\r\n<span class=\"hljs-keyword\">var<\/span> numbers = Enumerable.Range(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">1000000<\/span>);\r\n<span class=\"hljs-keyword\">var<\/span> evenNumbers = numbers.AsParallel().Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>).ToList();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-62\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we use the <code><strong>AsParallel<\/strong><\/code> extension method to convert a regular LINQ query into a parallel query. The <code><strong>Where<\/strong><\/code> operation is then executed concurrently across multiple cores, improving the performance of the query.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Handling exceptions and optimizing performance with PLINQ:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Handling exceptions:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">PLINQ handles exceptions differently than regular LINQ. When an exception occurs in a PLINQ query, it is wrapped in an <code><strong>AggregateException<\/strong><\/code>, which can contain multiple inner exceptions from different tasks. To handle these exceptions, you should catch the <code><strong>AggregateException<\/strong><\/code> and process its inner exceptions accordingly.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-63\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">try<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">var<\/span> evenNumbers = numbers.AsParallel().Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>).ToList();\r\n}\r\n<span class=\"hljs-keyword\">catch<\/span> (AggregateException ex)\r\n{\r\n    <span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-keyword\">var<\/span> innerEx <span class=\"hljs-keyword\">in<\/span> ex.InnerExceptions)\r\n    {\r\n        <span class=\"hljs-comment\">\/\/ Handle each individual exception<\/span>\r\n        Console.WriteLine(innerEx.Message);\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-63\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Optimizing performance:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To optimize the performance of PLINQ queries, you can use various techniques, such as specifying the degree of parallelism, controlling the partitioning strategy, or using parallel options like <code><strong>WithCancellation<\/strong><\/code> or <code><strong>WithExecutionMode<\/strong><\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-64\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">using<\/span> System.Threading;\r\n<span class=\"hljs-keyword\">using<\/span> System.Threading.Tasks;\r\n\r\n<span class=\"hljs-keyword\">var<\/span> cts = <span class=\"hljs-keyword\">new<\/span> CancellationTokenSource();\r\n<span class=\"hljs-keyword\">var<\/span> evenNumbers = numbers.AsParallel()\r\n                         .WithDegreeOfParallelism(Environment.ProcessorCount)\r\n                         .WithCancellation(cts.Token)\r\n                         .WithExecutionMode(ParallelExecutionMode.ForceParallelism)\r\n                         .Where(n =&gt; n % <span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>)\r\n                         .ToList();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-64\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In this example, we specify the degree of parallelism, which controls the number of concurrently running tasks, set a cancellation token to allow for query cancellation, and use the <code><strong>ForceParallelism<\/strong><\/code> execution mode to optimize the query&#8217;s performance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and performance considerations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Writing efficient LINQ queries and using LINQ effectively can greatly impact the performance of your application. Below are some best practices and performance considerations to help you make the most of LINQ:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Writing efficient LINQ queries:\n<ul class=\"wp-block-list\">\n<li>Use the appropriate LINQ method for the task: Each LINQ method has a specific purpose, and using the right method for the task can greatly improve the performance of your query. For example, use <code><strong>Any<\/strong><\/code> instead of <code>Count<\/code> when checking if a collection contains any elements.<\/li>\n\n\n\n<li>Limit the amount of data processed: Use methods like <code><strong>Take<\/strong><\/code>, <code><strong>Skip<\/strong><\/code>, and <code><strong>Where<\/strong><\/code> to reduce the amount of data being processed in your queries.<\/li>\n\n\n\n<li>Be mindful of deferred execution: Understand that some LINQ operations have deferred execution, meaning they don&#8217;t execute until the result is enumerated. This can lead to performance issues if you&#8217;re not careful with how your queries are structured.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Avoiding common performance pitfalls:\n<ul class=\"wp-block-list\">\n<li>Avoid using <code><strong>ToList<\/strong><\/code> or <code><strong>ToArray<\/strong><\/code> prematurely: Converting your query results to a list or array forces the execution of the entire query. Use these methods only when necessary.<\/li>\n\n\n\n<li>Be cautious with <code><strong>SelectMany<\/strong><\/code>: <code><strong>SelectMany<\/strong><\/code> can create large intermediate result sets if not used carefully. Be aware of the potential impact on performance when using this method.<\/li>\n\n\n\n<li>Minimize the use of lambda expressions in query predicates: Lambda expressions can sometimes lead to performance issues, especially when used with complex types or large data sets. If possible, use simpler predicates or precompute certain values to avoid performance issues.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Tips for debugging and profiling LINQ queries:\n<ul class=\"wp-block-list\">\n<li>Use the <code><strong>System.Diagnostics.Stopwatch<\/strong><\/code> class to measure the execution time of your queries. This can help you identify performance bottlenecks and optimize your code accordingly.<\/li>\n\n\n\n<li>Use a tool like LINQPad to test and optimize your LINQ queries in isolation. This can help you identify performance issues and better understand how your queries are being executed.<\/li>\n\n\n\n<li>If your application relies heavily on LINQ, consider using a dedicated LINQ profiling tool, like ReSharper&#8217;s LINQ Profiler or the LINQ Insight tool from Devart. These tools can help you identify performance issues, optimize your queries, and better understand how your LINQ code is being executed.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">By following these best practices and performance considerations, you can write more efficient LINQ queries and improve the overall performance of your applications. Always remember to measure the performance of your queries and optimize them as needed to ensure your application runs smoothly and efficiently.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various sources using a consistent, expressive syntax. LINQ brings the power of querying data to the C# language itself, making it easier to work with collections, databases, and XML data, among others. The use [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,4],"tags":[],"class_list":["post-322","post","type-post","status-publish","format-standard","category-csharp","category-programming-languages","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Use LINQ for Advanced Data Manipulation in C#<\/title>\n<meta name=\"description\" content=\"Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Use LINQ for Advanced Data Manipulation in C#\" \/>\n<meta property=\"og:description\" content=\"Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-09T21:16:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-23T16:21:55+00:00\" \/>\n<meta name=\"author\" content=\"w3compadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"w3compadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/\"},\"author\":{\"name\":\"w3compadmin\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"headline\":\"How to Use LINQ for Advanced Data Manipulation in C#\",\"datePublished\":\"2023-05-09T21:16:08+00:00\",\"dateModified\":\"2023-08-23T16:21:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/\"},\"wordCount\":3985,\"commentCount\":0,\"articleSection\":[\"C#\",\"Programming Languages\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/\",\"name\":\"How to Use LINQ for Advanced Data Manipulation in C#\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\"},\"datePublished\":\"2023-05-09T21:16:08+00:00\",\"dateModified\":\"2023-08-23T16:21:55+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"description\":\"Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/use-linq-advanced-data-manipulation-csharp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Articles Home\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programming Languages\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/programming-languages\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Use LINQ for Advanced Data Manipulation in C#\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\",\"name\":\"Developer Articles Hub\",\"description\":\"\",\"alternateName\":\"Developer Articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\",\"name\":\"w3compadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"contentUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"caption\":\"w3compadmin\"},\"sameAs\":[\"http:\\\/\\\/w3computing.com\\\/articles\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Use LINQ for Advanced Data Manipulation in C#","description":"Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/","og_locale":"en_US","og_type":"article","og_title":"How to Use LINQ for Advanced Data Manipulation in C#","og_description":"Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various","og_url":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/","article_published_time":"2023-05-09T21:16:08+00:00","article_modified_time":"2023-08-23T16:21:55+00:00","author":"w3compadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"w3compadmin","Est. reading time":"27 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/#article","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/"},"author":{"name":"w3compadmin","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"headline":"How to Use LINQ for Advanced Data Manipulation in C#","datePublished":"2023-05-09T21:16:08+00:00","dateModified":"2023-08-23T16:21:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/"},"wordCount":3985,"commentCount":0,"articleSection":["C#","Programming Languages"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/","url":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/","name":"How to Use LINQ for Advanced Data Manipulation in C#","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/#website"},"datePublished":"2023-05-09T21:16:08+00:00","dateModified":"2023-08-23T16:21:55+00:00","author":{"@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"description":"Language Integrated Query, or LINQ, is a powerful feature in C# that allows developers to seamlessly query and manipulate data from various","breadcrumb":{"@id":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.w3computing.com\/articles\/use-linq-advanced-data-manipulation-csharp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Articles Home","item":"https:\/\/www.w3computing.com\/articles\/"},{"@type":"ListItem","position":2,"name":"Programming Languages","item":"https:\/\/www.w3computing.com\/articles\/programming-languages\/"},{"@type":"ListItem","position":3,"name":"How to Use LINQ for Advanced Data Manipulation in C#"}]},{"@type":"WebSite","@id":"https:\/\/www.w3computing.com\/articles\/#website","url":"https:\/\/www.w3computing.com\/articles\/","name":"Developer Articles Hub","description":"","alternateName":"Developer Articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.w3computing.com\/articles\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561","name":"w3compadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","url":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","contentUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","caption":"w3compadmin"},"sameAs":["http:\/\/w3computing.com\/articles"]}]}},"featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"w3compadmin","author_link":"https:\/\/www.w3computing.com\/articles\/author\/w3compadmin\/"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/comments?post=322"}],"version-history":[{"count":11,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/322\/revisions"}],"predecessor-version":[{"id":333,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/322\/revisions\/333"}],"wp:attachment":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/media?parent=322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/categories?post=322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/tags?post=322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}