LINQ

Posted on May 25, 2009 09:36 by Ahmed Al Amir

Language Integrated Query (LINQ) as its name implies, is a way to address the data access needs of developers by enabling support directly in the programming language.

There have always been a problem bridging the semantic gap between different types of data and the world of objects, LINQ introduces standard, easily-learned patterns for querying and updating data, and the technology can be extended to support potentially any kind of data store.

Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. Furthermore, we have to learn a different query language for each type of data source: SQL, Oracle databases, XML documents, various Web services…etc. LINQ makes a query a first-class language construct in C# and Visual Basic. We write queries against strongly typed collections of objects by using language keywords and familiar operators.

There are many questions raised about LINQ performance and implementation as some developers thought that it depends on reflection which hurts the performance. Today I’m going to clarify that matter and show you how LINQ was originally implemented.

LINQ is mostly dependent on a mathematical concept known as “Lambda Calculas”.  Lambda calculus is a formal mathematical system devised by Alonzo Church to investigate functions, function application and recursion. It has influenced many programming languages but none more so than functional programming languages.

In the lambda calculus, functions are first-class entities: they are passed as arguments, and returned as results. Thus lambda expressions are a reification of the concept of an unnamed procedure without side effects. The lambda calculus can be thought of as an idealized, minimalistic programming. It is capable of expressing any algorithm, and it is this fact that makes the model of functional programming an important one.

Wes Dyer talked about anonymous recursion in C# and how to use lambdas which can be found here [http://blogs.msdn.com/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx], here is a snapshot of the lambda expression:

namespace Church

{   

   public delegate F F(F x);

   public static class Church

   {

        // Identity Function

        public static F id = x => x;

        // Conditionals

        public static F True = tbranch => fbranch => tbranch;

        public static F False = tbranch => fbranch => fbranch;

        public static F Not = cond => cond(False)(True);

        public static F And = cond1 => cond2 => cond1(cond2)(False);

        public static F Or = cond1 => cond2 => cond1(True)(cond2);

         //Numerals

        public static F Zreo = f => id;

        public static F One =  id;

        public static F Two = f => x => f(f(x));

        public static F Succ = n => f => x => f(n(f)(x));

        //Arithmetic

        public static F IsZero = n => n(x => False)(True);

        public static F Plus = m => m(Succ);

        public static F Times = m => n => f => m(n(f));

     }

}

 

 

So it something like a function of a function of a function … etc.

To furthur understand LINQ, consider the following example:

using System;

using System.Collections.Generic;

//using System.Linq;

using System.Text;

namespace LinqTest

{   

    static class Program

    {       

        static void Main(string[] args)

        {

            var clients = GetClients();

            foreach (var c in clients)

            {

                Console.WriteLine("Name : {0}\tCity : {1}\tCountry : {2}",    c.Name, c.City, c.Country);

            }

        }

        static IEnumerable<Client> GetClients()

        {

            return new List<Client>

            {

                new Client{ID=1,Name="Ahmed",City="Cairo",Country="Egypt"},

                new Client{ID=2,Name="Hana",City="Alex",Country="Egypt"},

                new Client{ID=3,Name="Adham",City="Luxor",Country="Egypt"},

                new Client{ID=4,Name="Noha",City="London",Country="England"},

                new Client{ID=5,Name="Xavi",City="Barcelona",Country="Spain"}

            };

        }

    }

    public class Client

    {

        public long ID { get; set; }

        public string Name { get; set; }

        public string City { get; set; }

        public string Country { get; set; }

    }

}

As observed from the example, we have commented the LINQ namespace, and created a list of clients, now consider that we want to filter the list to get only the clients from Egypt so we will create a method to do this filtering:

static IEnumerable<Client> GetEgyptian(this IEnumerable<Client> source)

{     foreach (var c in source)

         if (c.Country == "Egypt") yield return c;

}

 

And update the Main entry to be like:

static void Main(string[] args)

{

    var clients = GetClients();

    var EgyptClients = clients.GetEgyptian();

    foreach (var c in EgyptClients)

    {

        Console.WriteLine("Name : {0}\tCity : {1}\tCountry : {2}",c.Name, c.City, c.Country);

    }           

}

 

Consider that we want to get clients from England, so we will create another method to do filtering our we can generalize our filtering method to be like the following :

static IEnumerable<T> Where<T>(this IEnumerable<T> source,Predicate<T> p)

{

    foreach (var c in source)

        if (p(c)) yield return c;

}

As can be seen, we use generics to make a template for our filtering method, to use this filter in .Net 2.0, we write the following code:

 

static void Main(string[] args)

{

     var clients = GetClients();

     var EgyptClients = clients.Where(delegate(Client c) { return c.Country == "Egypt"; });

     foreach (var c in EgyptClients)

     {

         Console.WriteLine("Name : {0}\tCity : {1}\tCountry : {2}", c.Name, c.City, c.Country);

     }

}

 

We can optimze this delegate by using lambda expression as follows :

var EgyptClients = clients.Where((Client c) =>  { return c.Country == "Egypt"; }); 

 

And we can refine this code as we are querying the Client object as fllows :

var EgyptClients = clients.Where( c => c.Country == "Egypt" );

 

Now consider that we want to sort our clients by city, instead of creating our OrderBy generic method we will use the generic one provided by LINQ framework. So we will uncomment the LINQ namespace and order our clients descending by city :

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace Test

{

    static class Program

    {

        static void Main(string[] args)

        {

            var clients = GetClients();

            var EgyptClients = clients.Where( c => c.Country == "Egypt").OrderByDescending(c => c.City);

            foreach (var c in EgyptClients)

            {

                Console.WriteLine("Name : {0}\tCity : {1}\tCountry : {2}",c.Name, c.City, c.Country);

            }

        }

        static IEnumerable<Client> GetClients()

        {

            return new List<Client>

            {

                new Client{ID=1,Name="Ahmed",City="Cairo",Country="Egypt"},

                new Client{ID=2,Name="Hana",City="Alex",Country="Egypt"},

                new Client{ID=3,Name="Adham",City="Luxor",Country="Egypt"},

                new Client{ID=4,Name="Noha",City="London",Country="England"},

                new Client{ID=5,Name="Xavi",City="Barcelona",Country="Spain"}

            };

        }

        static IEnumerable<T> Where<T>(this IEnumerable<T> source,Predicate<T> p)

        {

            foreach (var c in source)

                if (p(c)) yield return c;

        }

    }

}

 

C# 3.0 introduces Query expressions which are written in declarative query syntax. A query expression must begin with a [from] clause and must end with a [select] or [group] clause. Between the first from clause and the last select or group clause, it can contain one or more of these optional clauses: [where], [orderby], [join], and even additional [from] clauses.

Let’s transform our client filtering to be written as a query expression, see below:

 

//var EgyptClients = clients.Where( c => c.Country == "Egypt" ).OrderByDescending(c => c.City);

var EgyptClients = from c in clients where c.Country == "Egypt" orderby c.City descending select c; 

 

If you use a Reflector for the above code,it will show the code below,

private static void Main(string[] args)

{

    IOrderedEnumerable<Client> EgyptClients = GetClients().Where<Client>(delegate (Client c)

    {

        return (c.Country == "Egypt");

    }).OrderByDescending<Client, string>(delegate (Client c)

    {

        return c.City;

    });

    foreach (Client c in EgyptClients)

    {       

        Console.WriteLine("Name : {0}\tCity : {1}\tCountry : {2}", c.Name, c.City, c.Country);

    }

} 

 

As we can see from the above example that we used some c# new keywords to do the query and this syantx is transforemed by the compiler into the same code we wrote before, so LINQ querires are just some recusive functions with no reflection and no performance issues. So, there is no magic about it!               

  

Currently rated 4.6 by 7 people

  • Currently 4.571429/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Related posts

Comments

May 21. 2009 18:36

Gravatar

Thanks a lot Ahmed, it's a very nice article.

Keep up the good work :)

Ahmed Fouad eg

May 21. 2009 19:05

Gravatar

Yes there is no magic about it

George Johnson us

May 21. 2009 19:06

Gravatar

Nice Intor

Kambonga ph

May 21. 2009 19:07

Gravatar

verry well
but i need practical example; how can i use it

Jafar ph

December 9. 2009 18:20

Gravatar

Nice resource. rss feed added

personal loans us

December 13. 2009 20:33

Gravatar

Hope I willfind some more post on the blog next time as it is just cracking.

viagra soft tabs

December 22. 2009 21:52

Gravatar

Like your writing! Still you can do some things to improve it.

cash loans us

December 26. 2009 23:48

Gravatar

Nice info for LINQ.

Bedding Duvet Covers us

December 27. 2009 00:43

Gravatar

Nice info for LINQ.

Bedding Duvet Covers us

December 30. 2009 12:05

Gravatar

Do you have any more info on this?

payday loans us

January 12. 2010 11:17

Gravatar

LINQ. Thanks! very helpful post!! like the template btw ;).

outdoor swing sets us

January 13. 2010 21:39

Gravatar

Yea nice Work !:D

payday loans us

January 20. 2010 18:54

Gravatar

LINQ. Hmmm interesting stuff.

Bed Bugs Pictures us

January 21. 2010 02:48

Gravatar

LINQ. Thank you for another great article. Where else could anyone get that kind of information in such a perfect way of writing? I have a presentation next week, and I am on the look for such information..

Phone Pay As You Go us

January 22. 2010 00:03

Gravatar

Just wanted to say thanks for this.

payday loans us

February 22. 2010 01:33

Gravatar

Hey - nice blog, just looking around some blogs, seems a pretty nice platform you are using. I'm currently using Wordpress for a few of my sites but looking to change one of them over to a platform similar to yours as a trial run. Anything in particular you would recommend about it?

fast loans

February 22. 2010 03:27

Gravatar

LINQ. Thank you for another great article. Where else could anyone get that kind of information in such a perfect way of writing? I have a presentation next week, and I am on the look for such information..

Hair Color Pictures us

February 22. 2010 04:21

Gravatar

LINQ. Very good article.Thank you for sharing.Good luck !.

Hair Color Pictures us

February 25. 2010 02:38

Gravatar

Being at the right place at the right time can only happen when you keep moving toward the next opportunity.

Loans in NJ us

February 26. 2010 09:41

Gravatar

LINQ. Some interesting information, thank you! I'll refer my blog readers to this site .

Blog us

February 26. 2010 09:48

Gravatar

LINQ. Do you have any more info on this?.

Blog us

March 6. 2010 23:39

Gravatar

LINQ. Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. .

dog toy us

March 7. 2010 01:00

Gravatar

LINQ. Nice ... maybe you could update this. Thanks.

cooking recipe us

March 7. 2010 01:04

Gravatar

LINQ. Do you have any more info on this?.

cooking recipe us

March 7. 2010 01:35

Gravatar

LINQ. Very interesting post I have seen here.Thanks for posting it..

herpes us

March 7. 2010 02:39

Gravatar

LINQ. Very good article.Thank you for sharing.Good luck !.

picturehaircuts us

March 7. 2010 03:15

Gravatar

LINQ. Many friends of mine talk about your blog anytime, and now I am here. After read a couple of your post, I must say that it's really great..

cooking recipes us

March 7. 2010 04:49

Gravatar

LINQ. Well, I just found your blog unexpectedly from the search engine. First time I saw it, I know it's a very informative blog. I got so many something new from here. Good work and thanks for that!.

photos us

March 7. 2010 04:54

Gravatar

Live daringly, boldly, fearlessly. Taste the relish to be found in competition - in having put forth the best within you.

fast payday loans us

March 17. 2010 20:54

Gravatar

The lambda expression is pretty simple if you break it down into small sections that you can manage.

patient assistance program us

March 17. 2010 20:56

Gravatar

That is very true. I agree 100 percent. It is a great piece of code.

canada drugs us

March 17. 2010 20:57

Gravatar

Very true, As with all coding, it is very important not to get overwhelmed. When your mind can't wrap around it, its best to take a step back and let the problem sit for a while.

prescription us

March 18. 2010 12:23

Gravatar

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.

pay day loans

March 19. 2010 17:54

Gravatar

I admire the valuable information you offer in your articles. I will bookmark your blog and have my children check up here often. I am quite sure they will learn lots of new stuff here than anybody else!

personal loans

March 21. 2010 00:54

Gravatar

Couldnt be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!

Acne scar treatment

March 21. 2010 03:57

Gravatar

LINQ. Thank you for your help!.

occupational us

March 21. 2010 07:59

Gravatar

LINQ. Very good article.Thank you for sharing.Good luck !.

fleas us

March 22. 2010 10:01

Gravatar

The only way around is through.

acai select us

March 23. 2010 01:36

Gravatar

LINQ. I always wanted to write in my site something like that but I guess you'r faster :).

scabies pictures us

March 23. 2010 02:37

Gravatar

LINQ. Interesting information. May I add this blog to my favorite ?.

scabies pictures us

March 23. 2010 06:55

Gravatar

LINQ. I enjoyed reading it.Really interesting articles. I need to read more on this topic..Thanks for sharing a nice info....

water filter us

March 23. 2010 07:44

Gravatar

Thanks for the post, normally queries against data are expressed as simple strings without type checking at compile time.

pharmacies us

March 23. 2010 07:45

Gravatar

That is very true and a very good point.

prescription drug prices us

March 23. 2010 12:36

Gravatar

There is obviously a lot to know about this. I think you made some good points in Features also. Big thanks for the useful info i found on LINQ.

instant loan

March 24. 2010 06:28

Gravatar

LINQ. Useful information shared..Iam very happy to read this article..thanks for giving us nice info.Fantastic walk-through. I appreciate this post.

wikimatrix us

March 24. 2010 08:06

Gravatar

Couldnt be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing! Big thanks for the useful info i found on LINQ.

teeth whitening

March 24. 2010 08:14

Gravatar

LINQ. Wow! what an idea ! What a concept ! Beautiful .. Amazing �.

blood pressure us

March 24. 2010 18:10

Gravatar

LINQ. thanks !! very helpful post!.

weight loss us

March 25. 2010 03:46

Gravatar

Wow! Thank you! I always wanted to write in my site something like that. Big thanks for the useful info i found on LINQ.

bad credit loans

March 29. 2010 18:28

Gravatar

I completely agree with the above comment, the internet is with a doubt growing into the most important medium of communication across the globe and its due to sites like this that ideas are spreading so quickly.

Stretch marks treatment

April 1. 2010 03:52

Gravatar

LINQ. Do you have any more info on this?.

gown dress us

April 2. 2010 10:17

Gravatar

An excellent post with some excellent queries and code.

buy prescription drugs online us

April 2. 2010 10:18

Gravatar

That is very true, I really took a lot away from this post.

prescriptions us

April 2. 2010 10:19

Gravatar

As did I, it was a great explanation.

canada pharmacy us

April 4. 2010 08:49

Gravatar

There is obviously a lot to know about this. I think you made some good points in Features also. Big thanks for the useful info i found on LINQ.

getting rid of cellulite

April 4. 2010 17:28

Gravatar

Great work done there. Thanks for sharing your story.

Fresher resume format us

April 7. 2010 08:53

Gravatar

Many thanks for taking the time to share this, I really feel strongly about it and love learning far more on this topic. If possible, as you gain expertise, would you mind updating your website with extra info? It is particularly useful for me.

gout pain relief in 2 hours cn

April 7. 2010 20:20

Gravatar

Hi I found this website by mistake when i was searching Google for this acne issue, I have to say your web page is genuinely useful I also adore the theme, its incredible!. I dont have that much time to understand all your submit at the moment but I've bookmarked your website and also signed up for the RSS feeds. I will be back again in a day or two. many thanks for a wonderful web site.

Best Diet For Gout Patients cn

April 8. 2010 06:26

Gravatar

I wanted to say that it's nice to know that someone else also pointed out this as I had trouble finding the same data elsewhere. This was the first place that told me the answer. Big thanks for your helpful information i discovered on Primer post.

affordable dental insurance cn

April 8. 2010 09:56

Gravatar

I admire the useful facts you offer you with your posts. I'll bookmark your blog and have my kids examine up below often. I am quite sure they will find out lots of new stuff the following than anybody else!

affordable dental insurance cn

April 10. 2010 08:34

Gravatar

Noo! I'm utilizing my iphone and I cannot seem being able to open the web page proper. I will be again to read this tonight when I get back from school. The topic looks like something I have to go through. I've bookmarked it and I'll be back later.

Inkjet Ink Cartridges cn

April 10. 2010 08:58

Gravatar

Stumbled throughout your post while in search of by way of yahoo. I go through the very first paragraph and its exceptional! I don't have enough time to finish it now, but I've bookmarked your site and will go by means of the rest tonight. : )

refilling ink cartridges cn

April 10. 2010 09:30

Gravatar

Hey very nice blog!! Man .. Beautiful .. Amazing .. I will bookmark your blog and take the feeds also... Big thanks for the useful info i found on LINQ.

toe nail fungus cure

April 10. 2010 09:46

Gravatar

Just desire to say your post is impressive. The lucidity within your post is basically spectacular and i can assume you might be an expert on this field. Nicely with your permission allow me to grab your rss feed to retain as much as date with succeeding publish. Thanks a million and please maintain up the fabulous do the job.

refilling ink cartridges cn

April 10. 2010 10:17

Gravatar

Hi I discovered your site by mistake when i was browsing Google for this issue, I should say your web site is really very helpful I also love the pattern, its amazing!. I dont have that significantly time to study all your publish at the moment but I've bookmarked your internet site and also add your RSS feeds. I'll be back again in a day or two. thanks for a good web site.

rims for cars cn

April 10. 2010 10:47

Gravatar

Hi. that is type of an "unconventional" question , but have other visitors asked you how get the menu bar to glance like you've got it? I also have a web site and am truly searching to alter around the theme, however am scared to death to mess with it for fear in the search engines punishing me. I'm quite new to most of this ...so i'm just not positive specifically how to attempt to to it all however. I'll just hold functioning on it 1 day at a time.

Cheap Rims and Tires cn

April 10. 2010 11:30

Gravatar

I have been reading your posts frequently. I ought to say that you just are doing a great job. Please retain up the very good do the job.

dirt cheap rims cn

April 10. 2010 13:56

Gravatar

Well, the report is in reality the greatest on this worthy subject matter. I fit in together with your conclusions and will thirstily glimpse forward to view your coming updates. Saying thankx won't just be sufficient, with the increadible clarity within your writing. I'll directly grab your feeds to stay abreast of any updates. Pleasant work and a lot success inside your business dealings! Regards, Joshua!

Cushion Cut Engagement Rings cn

April 13. 2010 00:30

Gravatar

Intimately, the post is actually the best on this laudable http://www.jumptags.com/thigpenmorgan/ topic. I harmonize with your conclusions http://www.mister-wong.com/user/thigpenmorgan/ and saying thanks will not just be adequate, for the fantastic lucidity in your writing.

Lowell Shukla cn

April 13. 2010 00:33

Gravatar

I was very pleased to find this site.I wanted to thank you http://www.jumptags.com/ofself/ for this great read!! I http://www.mister-wong.com/user/jesse520 definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post. Big thanks for the useful info ..

Raphael Jinkens cn

April 13. 2010 04:19

Gravatar

I completely agree with the above comment, the internet is with a doubt growing into the most important medium of communication across the globe and its due to sites like this that ideas are spreading so quickly. Big thanks for the useful info i found on LINQ.

genital warts removal

April 13. 2010 19:12

Gravatar

Hello. Great job. I did not expect this on a Wednesday. This is a great story. Thanks!

car refinancing

April 14. 2010 00:27

Gravatar

I hope you have a http://ezinearticles.com/?Facts-and-Fiction-Associated-With-Hypnosis&;id=3389042 day!

Soo Spirko cn

April 17. 2010 02:46

Gravatar

There is obviously a lot to know about this. I think you made some good points in Features also.

debt settlement services

April 17. 2010 03:56

Gravatar

Excellent post. Bookmarked it already. have a nice day, mate.

Unusual Engagement Rings cn

April 18. 2010 20:45

Gravatar

Many thanks for the useful data. It had been really practical for me. Maintain sharing this kind of strategies from the long term as properly.

the truth about six pack abs review cn

April 19. 2010 16:43

Gravatar

I know some people with problems opening the web page making use of Opera. I reopened it making use of Firefox and it seems to be ok.I believe I see those exact same errors in Opera as nicely.Hope that helps.

how to get six pack abs fast cn

April 20. 2010 07:24

Gravatar

You will discover absolutely a great deal of particulars like that to take into consideration. That's a good point to provide up. I offer the thoughts above as general inspiration but clearly you will find questions like the a single you provide up in which probably the most critical thing is going to be functioning in honest good faith. I don?t know if ideal practices have emerged around issues like that, but I am certain that your job is clearly identified for a fair game.

repair your credit after bankruptcy cn

April 20. 2010 08:53

Gravatar

Hi there, Im at my work and was browsing on the website, goofing off, when I came across your site. It truly is fairly nicely executed, and I definitely like your mode of producing.

affordable dental insurance cn

April 21. 2010 20:28

Gravatar

If you want to achieve excellence, you can get there today. As of this second, quit doing less-than-excellent work.

payday loans us

April 22. 2010 00:56

Gravatar

thats some great info thanks - http://www.aboutmybaby.info

nojo baby sling us

April 23. 2010 11:56

Gravatar

Hi guys, if you're encountering problems with all the web page loading, it may possibly not just be your browser. Make certain you clear your cookies and try to reload the page. That may possibly make it function better.

Cheap Hotels In Chicago cn

April 25. 2010 23:52

Gravatar

the internet is with a doubt growing into the most important medium of communication across the globe and its due to sites like this that ideas are spreading so quickly.

Bad Faith Lawyer us

April 27. 2010 00:52

Gravatar

Substantially, the article is in reality the sweetest on this precious topic. I harmonise with your conclusions and will thirstily look forward to your upcoming updates.

Tax Rebates Retire gb

April 27. 2010 00:53

Gravatar

Well, easily, the post is in reality quite broad on this topic. But I'm looking forward to your forthcoming updates

Alternative Energy Future sa

April 28. 2010 12:16

Gravatar

Your tips are cracking and I am going to be satisfied to determine your updates.

Mens Engagement Rings cn

April 28. 2010 14:35

Gravatar

Thank you for yet another fantastic report. Wherever else could any one get that model of facts in such a ideal way of crafting? I've a presentation following week, and I'm about the seem for such details.

how to get a six pack fast cn

April 29. 2010 19:20

Gravatar

Great Post!

Pat Hampon us

April 30. 2010 02:43

Gravatar

always difficult because we all doesn't know the people with whom we are going to do work,but we have to co-operate and perform our best.Your experience seems to be a fantastic one.

Long Term Disability Insurance Lawyer us

May 3. 2010 13:04

Gravatar

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.

easy cash loans us

May 3. 2010 14:34

Gravatar

you have been inspiring to me with the post and all!

ethical issues in nursing us

May 4. 2010 23:43

Gravatar

Good internet site, I just bookmarked it and might be coming back so continue to keep up the superior operate! When it comes down to it I feel Alec Baldwin stated it most effective in your Glenn-Garry movie. A.I.D.A attention, curiosity, decision and action. I'll spare you guys the full speech exactly where he cusses everyone out.

progressive insurance quotes us

May 7. 2010 11:03

Gravatar

You will discover undoubtedly a great deal of information like that to take into consideration. Which is a great point to bring up. I provide you with the thoughts above as general inspiration but clearly you can find questions like the a single you bring up exactly where one of the most essential problem will be functioning in honest great faith. I don?t know if finest practices have emerged around issues like that, but I am sure that your work is clearly identified like a fair game.

Cheap Insurance Quotes

May 8. 2010 20:45

Gravatar

Excellent read, I just passed this onto a colleague who was doing a little research on that. And he actually bought me lunch because I found it for him smile So let me rephrase that: Thanks for lunch!

payday loans with no credit check us

May 10. 2010 21:20

Gravatar

Where do you recommend I go if I am in need of a competent and versatile developer?

Learn Conversational French us

May 14. 2010 00:14

Gravatar

Hi there, I found your blog via Google while searching for first aid for a heart attack and your post looks very interesting for me.

payday loans us

May 15. 2010 07:18

Gravatar

Hey,

My many friends talk about your blog anytime,That's reason why now I am here.And I felt You really posted very informative article.I was very happy to know about your blog.Thanks

seo services in

May 15. 2010 07:21

Gravatar

The way this blogging business works is that you will be the one that will provide people with information that they are looking for on the internet from your blog.

dried and powdered longwood aircraft dealers us

May 16. 2010 20:38

Gravatar

That's great, I never thought about Nostradamus in the OR (Insights from Eugene Litvak at IHI) like that before.

plastic card us

May 16. 2010 21:46

Gravatar

As a Newbie, I am always searching online for articles that can help me. Thank you

easy online loan us

May 17. 2010 00:45

Gravatar

I have been reading a lot on here the topic ApniGaddi.com | After i10 - Here's i20 inspired me, i have picked up some  great ideas. Thanks and i hope to see more soon.

Valve Ball us

May 19. 2010 13:04

Gravatar

love the blog, thanks for sharing your thoughts on seo etc

Ed hardy shoes cn

May 19. 2010 13:06

Gravatar

really good

fendi sunglasses cn

May 20. 2010 03:53

Gravatar

Thanks for sharing such a nice post.

China tour us

May 20. 2010 11:14

Gravatar

Many thanks for taking the time to discuss this, I feel strongly about it and adore learning extra on this subject. If feasible, as you gain expertise, would you brain updating your webpage with much more material? It's very helpful for me. Rapidshare search web-site

Increasing your ezine article views

May 20. 2010 15:52

Gravatar

This is a great project and I hope you get a lot of support!

chi hair straightener

May 20. 2010 15:53

Gravatar

Write your articles great hope that more exchanges to your site the first time very happy.very nice !

DC MICRO MOTOR

May 23. 2010 09:21

Gravatar

I don't like to usually read blogs and websites, but in this case I made an exception, since there were some informative content on here. Great job.

Hip Hop Songs us

May 25. 2010 05:25

Gravatar

I thought it was going to be some boring old post, but it really compensated for my time. I will post a link to this page on my blog. I am sure my visitors will find that very useful

quick and easy payday loans us

Comments are closed