Click here to Skip to main content
14,024,060 members
Click here to Skip to main content
Add your own
alternative version


203 bookmarked
Posted 4 Mar 2009
Licenced CPOL

LINQ FAQ for Newbies

, 17 Jul 2009
Rate this:
Please Sign up or sign in to vote.
A LINQ FAQ for newbies.


Introduction and goal

In this section, we will run through the basics of LINQ and then see five basic LINQ queries which you will always need in your project for queries. While looking at the basics, we will also try to learn what problems LINQ solves from the perspective of middle tier business objects.

You can download my 1000 questions and answers .NET book from the link here, I am dead sure you will enjoy it:


LINQ FAQ Part II: In this FAQ, we will see a basic example of LINQ to SQL, how to define 1-1 and 1-many relationships using LINQ, how we can optimize LINQ queries, execution of Stored Procedures using LINQ, and finally a simple CRUD example using LINQ to SQL: LINQ FAQ Part II.

Define LINQ

LINQ is a uniform programming model for any kind of data access. LINQ enables you to query and manipulate data independently of data sources. The figure below shows how .NET languages stand over the LINQ programming model and work in a uniform manner over any kind of data source. It’s like a query language which can query any data source and any transform. LINQ also provides full type safety and compile time checking. LINQ can serve as a good entity for the middle tier. So it will sit in between the UI and data access layers.

Below is a simple sample of LINQ. We have a collection of data objcountries to which LINQ is making a query with country name ‘India’. The collection objcountries can be any data source: dataset, datareader, XML etc. The figure below shows how ObjCountries can be any data. We then query for CountryCode and loop through it.

How does LINQ help us from the perspective of business objects?

One of the tedious jobs in business objects is parsing and searching object collections. For instance, consider the below figure where we want to search a country by an ID value. What we do is loop through the collection and get the object. Many may argue about keeping a key in a List or Array. Shown below is just a sample. If you want to search using country code and name, list / collection keys will not work with multi-value searches.

In other words, using LINQ, we can query business object collections and filter the collections using a single LINQ query.

Can you explain how a basic LINQ query looks like?

In order to understand a basic query for LINQ, let’s make a small sample project. Let’s take customer data which has customers and orders.

Customer NameCustomer CodeCityOrders
  • Shirts
  • Socks
  • Pants
  • Socks
  • Shoes

We have made the data a bit complex by having one customer and multiple orders, in other words we have one to many relationships.

So let’s make two classes: the customer class aggregated with a collection of addresses class. Below is how the class structure will look like to accommodate the one to many relationships of customer and multiple addresses.

The multiple addresses are the array collection aggregated inside the customer class. Shown below is a code snippet which loads the customer and address collections with hard coded data provided in the above table. Currently it is hardcoded, but this can be loaded from a database or some other source also.

clsCustomer[] objCustomer = new clsCustomer[]
	new clsCustomer{CustomerName="Khadak",customerCode="001",
	  City="Mumbai",Orders = new clsOrder[] {new clsOrder{ProductName="Shirt"},
	  new clsOrder{ProductName="Socks"}}},
	  new clsCustomer{CustomerName="Shiv",customerCode="002",
	    City="Delhi",Orders = new clsOrder[]{new clsOrder{ProductName="Pants"}}},
      new clsCustomer{CustomerName="Raju",customerCode="003",
        City="Mumbai",Orders = new clsOrder[]{new clsOrder{ProductName="Socks"}}},
      new clsCustomer{CustomerName="Shaam",customerCode="004",
        City="Delhi",Orders = new clsOrder[]{new clsOrder{ProductName="Shoes"}}}};

A basic LINQ query looks like something as shown below. It starts with the verb from followed by the data type and the objects, i.e., clsCustomer and obj objects. objCustomer is the collection which has the customer and addresses which we have loaded in the top section. select obj specifies that we need all the values.

from clsCustomer obj in objCustomer select obj

The figure below shows on the right hand side the query in LINQ. In the left hand side, we loop through the object collection.

We have made a simple project which demonstrates a basic LINQ query; you can download it to see how it works actually. The figure below shows the execution of the simple query.

How do we write a LINQ query to search with criteria?

We need to put the where clause before the select keyword.

return from clsCustomer Obj in objCustomer where Obj.customerCode == "001" select Obj;

The figure below shows the where clause in action.

How to do a join using LINQ query

Below is a LINQ code snippet for creating joins between object collections. In this case, we are creating a join on customer and orders. If you remember, the order collection was contained in the customer class.

return from clsCustomer ObjCust in objCustomer 
from clsOrder ObjOrder in ObjCust.Orders
select ObjCust;

Shown below is the result of a LINQ join query:

How can we do a group by using LINQ query?

The code snippet below shows how a group by query is written using LINQ. You can see we have first created a temp variable GroupTemp and then used the Select clause to return it.

var GroupCustomers = from ObjCust in objCustomer
group ObjCust by ObjCust.City into GroupTemp
select new {GroupTemp.Key,GroupTemp};

The image below shows group by in action.

How can we do an order by using a LINQ query?

Order by in LINQ is pretty simple. We just need to insert order by before the Select query.

return from clsCustomer ObjCust in objCustomer
orderby ObjCust.City
select ObjCust;

The figure below shows how we have ordered on the city name.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

You may also be interested in...

Comments and Discussions

SuggestionMy vote of 5 Pin
The14thNoah15-May-14 23:03
memberThe14thNoah15-May-14 23:03 
QuestionMy Vote of 4 Pin
Rahul VB5-May-14 21:45
professionalRahul VB5-May-14 21:45 
GeneralMy vote of 4 Pin
Armando de la Torre26-Jun-12 8:49
memberArmando de la Torre26-Jun-12 8:49 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey8-Jun-12 10:01
professionalManoj Kumar Choubey8-Jun-12 10:01 
Suggestionwhat about complicated quires Pin
eiaddar17-May-12 21:35
membereiaddar17-May-12 21:35 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey16-May-12 18:25
professionalManoj Kumar Choubey16-May-12 18:25 
QuestionMy vote of 5 Pin
ramesh_nrk6-Apr-12 2:38
memberramesh_nrk6-Apr-12 2:38 
GeneralMy vote of 5 Pin
ramesh_nrk6-Apr-12 2:37
memberramesh_nrk6-Apr-12 2:37 
GeneralMy vote of 4 Pin
Itz.Irshad13-Feb-12 17:44
memberItz.Irshad13-Feb-12 17:44 
GeneralMy vote of 5 Pin
Raj Champaneriya16-Dec-11 15:24
professionalRaj Champaneriya16-Dec-11 15:24 
GeneralMy vote of 5 Pin
Sandesh M Patil17-Jun-11 1:09
memberSandesh M Patil17-Jun-11 1:09 
GeneralMy vote of 2 Pin
BSRK17-May-11 19:49
memberBSRK17-May-11 19:49 
GeneralRe: My vote of 2 Pin
RyanEK24-Aug-11 12:33
memberRyanEK24-Aug-11 12:33 
GeneralMy vote of 4 Pin
Amir Mehrabi-Jorshari20-Oct-10 1:43
memberAmir Mehrabi-Jorshari20-Oct-10 1:43 
GeneralMy vote of 5 Pin
irfan patel14-Jul-10 11:04
memberirfan patel14-Jul-10 11:04 
General5 STARS Pin
irfan patel14-Jul-10 10:07
memberirfan patel14-Jul-10 10:07 
GeneralApostrophes (check title) Pin
tec-goblin11-Mar-09 4:03
membertec-goblin11-Mar-09 4:03 
GeneralLINQ to Word/Excel Pin
Qistoph4-Mar-09 23:38
memberQistoph4-Mar-09 23:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web05 | 2.8.190419.4 | Last Updated 18 Jul 2009
Article Copyright 2009 by Shivprasad koirala
Everything else Copyright © CodeProject, 1999-2019
Layout: fixed | fluid