Blue Theme Orange Theme Green Theme Red Theme
 
Nevron Chart
Home | Forums | Videos | Advertise | Certifications | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
Nevron Chart
Search :       Advanced Search »
Home » LINQ » Use CompiledQuery.Compile method to build parameterized DLINQ queries

Use CompiledQuery.Compile method to build parameterized DLINQ queries

In this article, I will make use of the CompiledQuery.Compile generated method which receives a Lambda expression as parameter, and then it generates a delegate that returns a generic IQueryable object that one can enumerate it through a foreach loop.

Author Rank :
Page Views : 7039
Downloads : 51
Rating :
 Rate it
Level : Intermediate
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
Bejaoui.zip
 
 
DevExpress Free UI Controls
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 


In this article, I will demonstrate a second way other than used in the "Building parameterized queries from ADO.Net to DLINQ" article, in this once, I will make use of the CompiledQuery.Compile generated method which receives a Lambda expression as parameter, and then it generates a delegate that returns a generic IQueryable object that one can enumerate it through a foreach loop.

The CompiledQuery class:

The main and the only mission of this class is to compile and recompile queries for reutilization purposes. I mean, there are situations when one needs to use the same query structure for several times by changing only parameters or criteria for example:

  • from cust in Customers where cust.Country =="Tunisia" select cust.Address 
  • from cust in Customers where cust.Country =="Algeria" select cust.Address 
  • from cust in Customers where cust.Country =="Morroco" select cust.Address  

In this case, only the Country field is changed at the where clause level but the rest of the query structure remains unmodified. For instance, SQL Server as a data base manager doesn't waste time through parsing similar queries as a part of the optimization process. Thus, the CompiledQuery class is coming into the world and has as principal mission for each time a similar query is needed; the LINQ parses the given query as a parameter within a Lambda expression. The generated delegate receives the followed arguments.

DataContext,Parameter1,...,ParameterN, and returns an IQueryable<Entityclass>.

The last argument is the type of the returned object. The DataContext is compulsory but the other arguments are optional, nevertheless, they are important as queries parameters are passed through them Now, to know how to make use of this class to build parameterized queries, I invite you to follow this walkthrough.

Walkthrough

During this tutorial the NorthWind SQL Server data base is used as a data source. In order to download it you can reach it via this link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

After downloading and deploying the msi file, the NORTHWIND data base is reached in C:\SQL Server 2000 Sample Databases\NORTHWND.MDF

  1. Create a new Windows application

  2. Add a Combo box and la list box into the Form1

  3. Add a reference to the System.Data.Linq and System.Data.Linq.Mappinq. This last namespace enables us to define Entity classes  witches are a sort of proxies' objects that represent the effective tables located in relational data base

  4. Create the Entity class that corresponds to the Customers  NORTHWIND.MDF table  as follow:


    //The entity class that plays the role of Customers table proxy

     

    [Table(Name = "Customers")]

    class Customer

    {

        [Column(Name = "CustomerID", IsPrimaryKey = true)]

        public string Identifier;

        [Column(Name = "CompanyName")]

        public string CompanyName;

        [Column(Name = "ContactName")]

        public string ContactName;

        [Column(Name = "Address")]

        public string Address;

        [Column(Name = "City")]

        public string City;

        [Column(Name = "Region")]

        public string Region;

        [Column(Name = "Country")]

        public string Country;

    }

  5. Implement the Form1 load even handler as under


    /*The data context witch is responsible for connecting to the

              the NorthWind data base*/

            DataContext oNorthWind;

            private void Form1_Load(object sender, EventArgs e)

            {

                //Instanciate the oNorthWind data context

                oNorthWind = new DataContext(@"Data   Source=.\SQLEXPRESS;AttachDbFilename=" +

                    @"C:\SQL Server 2000 Sample Databases\NORTHWND.MDF";Integrated Security=True;Connect" +

                    " Timeout=30;User Instance=True");

                //This query serves as data source to the combox box

                var Query = (from cust in oNorthWind.GetTable<Customer>()

                             select cust.Country).Distinct();

                comboBox1.DataSource = Query;

            }

  6. The method responsible for generating the parameterized query and populating the listbox1 control is designed as bellow:

    private void ParametrizedQuery(DataContext datacontext, string CountryParameter)

           
    {

                Table<Customer> Customers = oNorthWind.GetTable<Customer>();

                var Query = CompiledQuery.Compile((DataContext dc, string Country) =>

                                                       from cust in Customers

                                                        where cust.Country == Country

                                                         select cust);

                foreach (var c in Query(datacontext, CountryParameter))

                {

                    listBox1.Items.Add("Address: " + c.Address + ", " + c.City );

                }

               

            }

    Once the method is called, the CountryParameter will be checked and the query will be recompiled according to its value. As you can observe, the Compile method receives a bi-parameters Lambda expression, the first parameter is the DataContext and the second parameter is the given query. The method also populates the listbox1 by the given address and the city of each customer according to the input parameter, the country in this case.

     

  7. Populate the comboBox1  selected index changed event handler by the under code so that when the user changes the country through the comboBox1, the current addresses list will be cleared out and  listbox1  will be again populated by a new addresses list according to the new selected value.

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

            
            
    {

                listBox1.Items.Clear();

                ParametrizedQuery(oNorthWind,comboBox1.Text);

            }

  8. Run the application and observe:



    Figure 1

That's it

Good Dotneting!!!

Note: The entities classes are out of the scope of this tutorial but I promise to write an article about them as soon as possible. Nevertheless, I will give the necessary instructions to use them in this tutorial.

Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 [Top] Rate this article
 
 About the author
 
Bechir Bejaoui

The author holds a master degree in NTIC specialized  in software developement delivered by the high school of communication SUPCOM, he also holds a bachelor degree in finance delivered by  the  economic sciences and  management  university of Tunis "FSEGT".

He also holds:

MCPD enteprise solutions developement 3.5 certification and MCTS distibuted application developement 2.0

 He's a freelance developer since 2006. Actually woking on the WPF, .Net framewok 3.5, silverlight and the other .Net new features, in addition, he is painter and sculptor.

Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Discover the Top 5 .NET Memory Management Fundamentals
To write the best .NET code, you need to know exactly how the .NET framework really manages memory. Ricky Leeks presents the Top 5 fundamental facts of .NET memory management. Learn more.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
Discover the top 5 tips for understanding .NET Interop
Become a Sponsor
 Comments
Execution Plan Saved? by James On September 11, 2008
Does this mean that the SQL Server execution plan is only created once, as is true for a stored procedure? Will the execution plan be recreated each time CompiledQuery.Compile() is called?
Reply | Email | Modify 
Execution Plan Saved? by James On September 11, 2008
Does this mean that the SQL Server execution plan is only created once, as is true for a stored procedure? Will the execution plan be recreated each time CompiledQuery.Compile() is called?
Reply | Email | Modify 

 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.