Introduction
This article is the first article in a Learning LINQ tutorial series. I am writing a complete LINQ tutorial for beginners explaining LINQ in detail. This article is the first article in this series.
Background
Language Integrated Query (LINQ) provides a way to query any type of data source.
MSDN says:
A query is an expression that retrieves data from a data source. Queries are usually expressed in a specialized query language.
The following is the pictorial representation of the scenario for the need for LINQ.
In a .Net application there is a scenario where it needs data from multiple data sources like SQL databases, XML documents, in memory objects like collections or any other type of data source.
To retrieve data from multiple data sources the underlying query and technology is like:
- SQL and ADO.Net for relational databases
- XQuery and XSLT for XML
LINQ simplifies this situation by offering a consistent model for working with data across various kinds of data sources and formats.
In a LINQ query, you are always working with objects. You use the same basic coding patterns to query and transform data in XML documents, SQL databases, ADO.NET Datasets, .NET collections and any other format for which a LINQ provider is available.
Basically LINQ simplifies the working model with its generic architecture to support many kinds of data sources and provide a common platform to execute the query and get the results.
LINQ Architecture
The preceding is the architecture of LINQ in simple way.
A .Net application uses LINQ queries to communicate with various kinds of data sources like SQL Server, XML documents and in-memory objects. Between SQL queries and data sources one layer of LINQ providers are present that converts the LINQ queries into the format that the underlying data source can understand.
For example if a LINQ query is written to fetch data from SQL Server then the provider LINQ to SQL will convert the underlying query into a Transact SQL that can be understood by the SQL Server database.
Sample Code
// Linq TO SQL
var employees = from listempoyees in context.tblEmployees
select listempoyees;
GridView1.DataSource = employees;
GridView1.DataBind();
// Linq to In memory Object
// string Array as sample
string[] LstCity = {"Mumbai", "Delhi" , "Patna","London","Banglore","Newyork" };
var cities = from cityList in LstCity
select cityList;
GridView1.DataSource = cities;
GridView1.DataBind();
MSDN says that the Query expression consists of the following three clauses:
The query variable itself takes no action and returns no data. It just stores the information that is required to produce the results for when the query is executed.
All LINQ query operations consist of the following three distinct actions:
- Obtain the data source.
string[] LstCity = {"Mumbai", "Delhi" , "Patna","London","Banglore","Newyork" };
- Create the query.
var cities = from cityList in LstCity
select cityList;
- Execute the query.
// 3. Query execution.
foreach (int c in cities)
{
Console.Write("{0,1} ", c);
}
Advantages of LINQ
- LINQ can be used for querying multiple data sources such as relational data and XML data.
- LINQ has syntax highlighting and IntelliSense that help to identify compile-time error checking.
- LINQ is extensible so new types of data sources can be made querable.
- LINQ is composable in nature and it can be used to solve complex problems into a series of short, comprehensible queries that are easy to debug.
- LINQ is declarative, it is very easy to understand and maintain.
Disadvantages of LINQ
- LINQ architecture has another layer for LINQ providers that will provide performance overhead sometimes with complex queries.
- LINQ is not a precompiled statement like Stored Procedures.
- Frequent changes must be recompiled and have a deployment overhead for the entire code.
- No good way to view permissions.
- When database queries are converted from SQL to the application side, joins are very slow that are very specific to LINQ to SQL.
Conclusion
There are many advantages and disadvantages of using LINQ technology. It is very important to choose very intelligently the LINQ for your application so that the beautiful features of LINQ can be utilized and the application can be more efficient. It should not be a performance overhead and problem for your application.
More tutorials on LINQ will be coming shortly.
Keep smiling and keep learning.
References: Introduction to LINQ Queries (C#).