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
2009-09-18 07:12:56
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
2009-09-18 13:27:28
+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
2009-09-18 13:26:14
@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
2010-01-28 16:03:50