Saturday, October 1, 2011

Linq Join on Mutiple columns using Anonymous type

Shout it kick it on DotNetKicks.com
I was working on the project using LINQ. I got the requirement to join the two entity on multiple column.

For example consider the following image. There are two entity Distributor and Customer related to each other.

Now I want to find out all customer who lives in same city where the distributor living.
So to find out that I have to make join between Customer and Distributor. And to achieve this I need to join by using multiple columns City,State,Country,ID. (Note: I am using id in join because later on I want to get which distributor near to customer).

Now with the LINQ you can join two entity on multiple columns by creating one anonymous type.
EmployeeDataContext edb= new EmployeeDataContext();
var cust = from c in edb.Customers
           join d in edb.Distributors on
             new { CityID = c.CityId, StateID = c.StateId, CountryID = c.CountryId, 
                   Id = c.DistributorId }    
           equals
             new { CityID = d.CityId, StateID = d.StateId, CountryID = d.CountryId, 
                   Id = d.DistributorId }    
           select c;
Note : As anonymous types used to join entity on multiple column, so for that make sure that both are equal and they must have the same properties in same order. Otherwise it don't get complied and you get error.

Once you are done run the code and you see the following query in your sql profiler or you can also use the visual studio feature to get the query.
SELECT [t0].[Id], [t0].[Name], [t0].[EmailId], [t0].[CityId], [t0].[StateId], 
[t0].[CountryId], [t0].[PinCode], [t0].[DistributorId]
FROM [dbo].[Customer] AS [t0]
INNER JOIN 
[dbo].[Distributor] AS [t1] ON 
([t0].[CityId] = [t1].[CityId]) 
    AND ([t0].[StateId] = [t1].[StateId]) 
    AND  ([t0].[CountryId] = [t1].[CountryId]) 
    AND ([t0].[DistributorId] =[t1].[DistributorId])

4 comments:

  1. Thаnκs for the marvelous poѕting! I actually еnjoyed reaԁіng іt, you're a great author. I will make certain to bookmark your blog and will often come back very soon. I want to encourage you to continue your great work, have a nice weekend!

    Have a look at my weblog; premature ejaculation pills

    ReplyDelete
  2. Appreciate the recommendation. Let me try it out.

    Stop by my web blog - cheap legal highs

    ReplyDelete
  3. Thank yοu for sharing yοuг thоughts.
    I truly appreciаtе your efforts and I will be waiting for your further write ups
    thanks once again.

    my webpage; Premature ejaculation pills

    ReplyDelete
  4. I think thіѕ іs one οf the such a lot vital іnfo foг me.

    Αnd i'm happy studying your article. However wanna statement on few general issues, The web site taste is ideal, the articles is in reality nice : D. Just right task, cheers

    Review my weblog :: Bzp Party Pills For Sale [Wikigpia.Info]

    ReplyDelete