views:

489

answers:

2

I have already searched through SO and could not fins a workable solution for this. I am just trying to figure what is the syntax for multiple inner joins in Linq to Entities. Thanks

+1  A: 

Well, I don't know LINQ to Entities particularly, but the normal LINQ syntax would be:

var query = from customer in db.Customers
            join order in db.Orders on customer.ID equals order.ID
            join product in db.Products on order.ProductID equals product.ID
            join info in db.Info on product.InfoID equals info.ID
            select new { customer.Name, info.BriefDescription };

(i.e. just several join clauses).

Now I suspect that you've already tried that - if so, what went wrong?

Jon Skeet
While this does indeed work, I believe it's better form to use relationships instead of joins in the specific case of L2E.
Craig Stuntz
+3  A: 

Jon's answer will work, but IMHO using join in LINQ to Entities is usually wrong, because it duplicates code in your model. I can rewrite Jon's query in a much simpler way in L2E:

var query = from customer in db.Customers
            from order in customer.Orders
            from product in order.Products
            from info in product.Info
            select new
            {
                customer.Name, 
                info.BriefDescription
            }

That's about 50% of the typing and 0% of the duplicated code. Consider that your relationships have already been defined in your DB and in your model. Do you really want to duplicate them again in every query you write, and break your queries when you refactor your model?

Craig Stuntz
wow..good point
@Craig - I wish I'd understood what I was looking at here a couple hours ago. What I missed was the "from order in customer.Order" - I was doing the equivalent to "from order in db.Orders", which is totally different. Thanks for this, though.
chris
This generates cross joins in the query...
dudeNumber4