2009-09-18 17 views

Respuesta

9

La respuesta de Jon funcionará, pero en mi humilde opinión using join in LINQ to Entities is usually wrong, porque duplica el código en su modelo. Puedo volver a escribir la consulta de Jon de una manera mucho más simple en 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 
      } 

Eso es alrededor del 50% de la mecanografía y 0% del código duplicado. Considere que sus relaciones ya han sido definidas en su DB y en su modelo. ¿Realmente desea duplicarlos de nuevo en cada consulta que escriba y romper sus consultas cuando refactorice su modelo?

+1

wow ... buen punto – user161433

+3

@Craig - Desearía haber entendido lo que estaba buscando aquí hace un par de horas. Lo que me perdí fue el "del pedido en el cliente. Orden" - Estaba haciendo el equivalente a "del pedido en db.Orders", que es totalmente diferente. Gracias por esto, sin embargo. – chris

+2

Esto genera uniones cruzadas en la consulta ... – dudeNumber4

7

Bueno, no sé LINQ a Entidades en particular, pero la sintaxis de LINQ normal sería:

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 }; 

(es decir, sólo varios join cláusulas).

Ahora sospecho que ya lo ha intentado, si es así, ¿qué salió mal?

+1

Si bien esto realmente funciona, creo que es mejor forma de usar relaciones en lugar de uniones en el caso específico de L2E. –

+0

¿Qué pasa con el caso cuando comenzamos con un par de entidades de información dadas ('de información en db.Info donde información ... unir producto ...'), no sería más eficiente las uniones explícitamente escritas en ese caso ? ¿O no importa en EF y lo haría 'desde el cliente en db.Clientes del pedido en el cliente. Pedidos del producto en orden.Productos de información en el producto.Info donde la información ...' sea igual de eficiente? – j00hi

+0

@ j00hi: Tendría que mirar el SQL que se está generando, básicamente. –

Cuestiones relacionadas