All of my samples above were against in-memory collections.
They show you how you will be able to use LINQ against any .NET object model
(includes all the ones you have already).
In my next few LINQ-related blog postings I’ll show how you
can go even further, and take advantage of the new DLINQ support to use the
above techniques against relational databases as well as the new XLINQ support
to work against XML files and structures. What is great about the LINQ project
is that the syntax and concepts are the same across all of its uses – so once
you learn how to use LINQ against an array or collection, you also know all the
concepts needed to work against a database or even XML file.
For example, if you use DLINQ to generate a Northwinds
database mapping of Suppliers and their Products (no code is required to set
this up), the below code is all you need to write to obtain and databind a
hierarchical database result against a GridView like we did above (note: we are
using the same data-shaping technique as our previous sample to only require
fetching two columns from the database, and automatically join the products of
each supplier as a hierarchical group result):
Listing 19
using System;
using System.Query;
public partial class Data_Data2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Northwind db = new Northwind();
GridView1.DataSource = from x in db.Suppliers
where x.Country == "USA"
orderby x.Country
select new {
x.CompanyName,
x.Country,
x.Products
};
GridView1.DataBind();
}
}
No custom SQL syntax or code is required – this is all that
needs to be written to efficiently fetch and populate hierarchical data now
(note: only the rows and columns needed will be fetched -- DLINQ can use the
remote function support within LINQ so that it does not need to materialize or
fetch the full database table or all columns from a row). And it is all
type-safe, with full compiler checking, intellisense, and debugging supported.
Even better, the ability to plug-in new LINQ providers (of
which DLINQ and XLINQ are just two examples) is completely open – so developers
who either build or use existing data providers today (for example: O/R
database mappers) can easily integrate their implementations with LINQ to have
a seamless developer experience. Once you know LINQ you will know all the
basics needed to program against any of them.