LINQ Include vs Join. Are they equivalent?

后端 未结 3 1553
庸人自扰
庸人自扰 2020-12-02 17:23

I have used join in linq to join 2 tables. What is the difference between a join and Include. From what I see, they both behave the same.

    Include vs. Joi         


        
3条回答
  •  执笔经年
    2020-12-02 17:46

    An Included is intended to retain the original object structures and graphs. A Join is needed to project a flattened representation of the object graph or to join types which are not naturally related through the graph (ie. join the customer's city with a shipping facility's city).

    Compare the following: db.Customers.Include("Orders") Generates an IEnumerable each of which may contain their corresponding list of Orders in an object graph like this:

    Customer 1
       Order
       Order
       Order
    Customer 2
       Order
       Order
    

    In contrast, if you do the same with a join projecting into an anonymous type you could get the following:

        from c in db.Customers 
        join o in db.Orders on c.CustomerId equals o.CustomerId 
        select new {c, o}
    

    This produces a new IEnumerable> where the customer is repeated for each order.

    { Customer1, orderA }
    { Customer1, orderB }
    { Customer1, orderC }
    { Customer2, orderD }
    { Customer2, orderE }
    { Customer2, orderF }
    

    While both may issue the same request to the database, the resulting type may be quite different.

提交回复
热议问题