Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Photos | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
 Resources  
Close
 Our Network  
Close
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:
Total page views :  3528
Total downloads :  29
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
Bejaoui.zip
 
Become a Sponsor


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.


Login to add your contents and source code to 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'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.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
Clickatell's SMS Gateway
Clickatell's Developer Solutions allow you to SMS enable any website or application via a range of API's. Learn More about our API connections.
Free access to .NET Memory Management video
Everything you need to know about Garbage Collection, Temporary Objects, Fragmentation, Finalization and common causes of memory leaks in .NET. Watch the video here.
Microsoft Visual Studio 2010 Professional
Microsoft Visual Studio 2010 Professional will launch on April 12, but you can beat the rush and secure your copy today by pre-ordering at the affordable estimated retail price of $549 (US). Pre-order now.
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.
Developer-Ready ASP.NET 2.0 Web Hosting with 3 MONTHS FREE
Now supporting .NET 3.0 Framework with Windows Workflow Foundation, Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF), windows CardSpace (WCS)! Providing more flexibility for Developers with Web Services Support and a User/Permission Manger. Also supporting MS SQL 2005/2000 with Real-Time Backups, FREE Automated Attach .MDF Tool, FREE SQL Restore and Shrink SQL DB Tools, and SQL
 
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
Bejaoui.zip
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
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 | Delete | 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 | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 2010  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.