Full Stack Developer
LINQ is known as Language Integrated Query and it is introduced in .NET 3.5 and Visual Studio 2008. The beauty of LINQ is it provides the ability to .NET languages(like C#, VB.NET, etc.) to generate queries to retrieve data from the data source. For example, a program may get information from the student records or access employee records, etc. In, past years, such type of data is stored in a separate database from the application, and you need to learn different types of query language to access such types of data like SQL, XML, etc. And also you cannot create a query using C# language or any other .NET language.
To overcome such types of problems Microsoft developed LINQ. It attaches one, more power to the C# or .NET languages to generate a query for any LINQ compatible data source. And the best part is the syntax used to create a query is the same no matter which type of data source is used means the syntax of creating query data in a relational database is the same as that used to create query data stored in an array there is no need to use SQL or any other non-.NET language mechanism. You can also use LINQ with SQL, with XML files, with ADO.NET, with web services, and with any other database.
In C#, LINQ is present in System. Linq namespace. It provides a different type of classes and methods which supports LINQ queries. In this namespace:
The enumerable class holds standard query operators that operate on an object which executes IEnumerable<T>.
The queryable class holds standard query operators that operate on an object which executes IQueryable<T>.
The following diagram will represent the complete architectural view of LINQ.
The LINQ to Objects provider allows us to query an in-memory object such as an array, collection, and generics types. It provides many built-in functions that we can use to perform many useful operations such as filtering, ordering, and grouping with minimum code.
The LINQ to Datasets provider provides us the flexibility to query data cached in a Dataset in an easy and faster way. It also allows us to do further data manipulation operations such as searching, filtering, sorting, etc. on the Dataset using the LINQ Syntax.
The LINQ to SQL Provider is designed to work with only the SQL Server database. You can consider this as an object-relational mapping (ORM) framework which allows one-to-one mapping between the SQL Server database and related .NET Classes. These .NET classes are going to be created automatically by the wizard based on the database table.
The LINQ to XML provider is designed to work with an XML document. So, it allows us to perform different operations on XML data sources such as querying or reading, manipulating, modifying, and saving the changes to XML documents. The System.Xml.Linq namespace contains the required classes for LINQ to XML.
The LINQ to Entities provider looks like LINQ to SQL. It means it is also an object-relational mapping (ORM) framework that allows one to one, one to many, and many to many mapping between the database tables and .NET Classes. The point that you need to remember is, it is used to query any database such as SQL Server, Oracle, MySQL, DB2, etc. Now, it is called ADO.NET Entity Framework.
1. Quick turnaround for development.
2. Queries can be dynamic.
3. Tables are automatically created into class.
4. Columns are automatically created into properties.
5. Relationships are automatically appended to classes.
6. Lambda expressions are awesome.
7. Data is easy to set up and use.
8. It is cleaner and type-safety.
9. LINQ is part of .NET, we can use the visual studio's debugger to debug the queries.
10. It is more concise and readable, especially when filtering multiple conditions.
11. They provide powerful filtering, ordering, and grouping capabilities with a minimum of application code.
1. It is hard to write a LINQ provider.
2. Lambdas and extension methods are my hammers and all problems are nails.
3. No clear outline for Tiers.
4. LINQ is not good to write complex queries like SQL Server.
5. There is no good way of viewing permissions.
6. Deferred execution and streaming are poorly understood.
7. A LINQ advance query is hard to understand but too many people don't understand it but
still use it.
8. Small data sets will take longer to build the query than execute.
9. There is an overhead for creating queries.
10. Debugging can be very tricky due to deferred execution and streaming.
In earlier to LINQ, it's necessary to learn SQL, C#, and several APIs that bind together to develop an entire application. So that those programming languages and data sources face some issues and coding also makes it difficult. Let’s see an example of several techniques was used by programmers when querying data before the arrival of Language Integrated Query.
You have already known how LINQ varies from and gets better upon ADO.NET. In addition, It helps in time-saving. Ultimately, you have known about how language integrated queries can be used for several types of data sources.