Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 3

Lesson 01: Introduction to LINQ

This lesson provides essential concepts to learning Language Integrated Query (LINQ). It helps you get
started and forms the basis for later lessons. Here are the objectives:
 Understand What LINQ Is.
 Learn What Problems LINQ Solves.
 Quickly See What LINQ Syntax Looks Like.
 Know Where LINQ can be Used.

What is LINQ?
LINQ is an acronym for Language Integrated Query, which is descriptive for where it's used and what
it does. The Language Integrated part means that LINQ is part of programming language syntax. In
particular, both C# and VB are languages that ship with .NET and have LINQ capabilities. Another
programming language that supports LINQ is Delphi Prism. The other part of the definition, Query,
explains what LINQ does; LINQ is used for querying data. Notice that I used the generic term "data"
and didn't indicate what type of data. That's because LINQ can be used to query many different types of
data, including relational, XML, and even objects. Another way to describe LINQ is that it is
programming language syntax that is used to query data.
Note: In addition to a new language syntax, LINQ can be used via a fluent API that chains methods
together. The bulk of this tutorial will concentrate on the C# language syntax that supports LINQ.

We Already have ADO.NET, so Why Another Data Access Technology?


Most applications work with data in one form or another, meaning that data is very important to the
work we do as software engineers. It's so important that the tools we use are constantly evolving, with
the next generation building and improving upon the previous. This doesn't change with LINQ, which
is the next giant leap in data development technology beyond ADO.NET.
ADO.NET is an object-oriented library, yet we must still reason about data from a relational
perspective. In simple scenarios, we can bind ADO.NET objects directly to user interfaces (UI), but
many other situations require the translation of the ADO.NET data into business objects with
relationships, rules, and semantics that don't translate automatically from a relational data store. For
example, a relational data store will model Orders and Customers with a foreign key from an Order
table to a Customer table, but the object representation of this data is a Customer object with a
collection of Order objects. Similar situations occur for other storage types such as hierarchical, multi-
value, and flat data sources. This gap between the representation of data from storage site to the objects
you use in your applications is called an Impedence Mismatch. While ADO.NET is an object library for
working with relational data, LINQ is a SQL-like syntax that produces usable objects. LINQ helps
reduce this Impedence Mismatch.
Note: The operative term in the previous paragraph is "reduce". LINQ does not eliminate Impedence
Mismatch, because you must still reason about your data store format. However, LINQ does remove a
lot of the plumbing work you have to do to re-shape your data as an object.

A Quick Peek at LINQ Syntax


Now that you know what LINQ is and why it was created, you'll see an example of LINQ syntax. The
example you'll see uses a C# array as the data source. The array contains musical artists names. The
purpose of the LINQ query is to read specified items from the data source and return them in a
collection. Later lessons will provide more information about the parts of this query, but what you see
here is only to give you a quick look at LINQ syntax so you can get a feel for what LINQ is like.
Listing 1-1 shows the LINQ query just described:

Listing 1-1: Sample LINQ Query


string[] musicalArtists = { "Adele", "Maroon 5", "Avril Lavigne" };

IEnumerable<string> aArtists =
from artist in musicalArtists
where artist.StartsWith("A")
select artist;

foreach (var artist in aArtists)


{
Console.WriteLine(artist);
}

In Listing 1-1, musicalArtists is a string[], but could be any IEnumerable collection. Here, we're using
LINQ to Objects and the Objects part is any IEnumerable collection. Since, C# arrays are IEnumerable,
they can be queried with LINQ to Objects. I won't spell everything out as LINQ to Objects going
forward, but if there's a difference in the data source, I'll spell it out.
The aArtists variable is an IEnumerable<string>, which is the result of the query; a collection of
objects. The query has three clauses: from, where, and select. The from clause has a range variable,
artist, which holds an individual reference for each object of the data source, aArtists. The where clause
filters the result, returning only objects (string in this case) who's first letter is 'A'. The select clause
returns the part of the object you want to return, referred to as a projection. In this example, the
projection is the entire object, which is a string. Later lessons dig into each of these clauses and more,
but this was just a quick overview to whet your appetite and let you see how easy and natural it is to
write LINQ code.

More about Data Sources


LINQ is intended to make it easy to query data sources. One of the more popular uses of LINQ is to
query relational databases. However, as you see here, LINQ can query objects. That's not all, the .NET
Framework includes libraries that allow anyone to create a LINQ provider that can query any data
source. Out of the box, Microsoft ships LINQ to Objects, LINQ to XML, LINQ to SQL (SQL Server),
and LINQ to Entities (Entity Framework). There are also 3rd party LINQ providers that make it easy to
query specialized data sources. For example, I wrote a LINQ provider lets you query the Twitter API,
LINQ to Twitter.
Much of this tutorial shows you how to use LINQ to Objects, but the same concepts are applicable to
other LINQ providers. There are nuances between each provider, but one thing is consistent: the skills
you learn for LINQ are generally reusable accross all LINQ providers.

Summary
Now you know what LINQ is, a new feature of programming languages that allow you to query data.
You learned how LINQ differs from and improves upon ADO.NET. Additionally, remember that LINQ
helps reduce Impedence Mismatch between data storage and the objects you code with every day.
Listing 1-1 gave you a quick example of what a LINQ query looks like, with a brief explanation of the
new syntax clauses. Finally, you learned about how LINQ can be used for many different types of data
sources, in addition to the frequent use of LINQ to Objects in this tutorial.

You might also like