2012-09-09 21 views
12

En este proyecto que tengo tablas:Linq. Seleccione de varias tablas

  1. Producto (id, catalogId, manufacturerId ...)
  2. Catálogo
  3. Fabricante

también Product modelo (id, name, catalogId, catalogTitle, manufacturerId, manufacturerName).

¿Cómo puedo escribir en Linq esta consulta SQL a continuación si quiero obtener artículo del producto?

SELECT Product.Name, Product.CatalogId, Product.ManufacturerId, [Catalog].Name, Manufacturer.Name 
FROM Product, [Catalog], Manufacturer 
WHERE [Catalog].Id=Product.CatalogId AND Manufacturer.id=Product.ManufacturerId AND Product.Active=1 
+1

¿Qué pasó con la unión? http://www.dotnetperls.com/join – TigOldBitties

+0

@TigOldBitties Recientemente edité mi pregunta. Quiero obtener un artículo del Producto. –

+0

La pregunta aún se aplica sin importar lo que esté tratando de obtener. – TigOldBitties

Respuesta

40

En primer lugar, responderé a su pregunta .. luego dirijo su respuesta a los comentarios. Para responder a su pregunta, en LINQ que haría lo siguiente:

from p in Product 
join c in Catalog on c.Id equals p.CatalogId 
join m in Manufacturer on m.Id equals p.ManufacturerId 
where p.Active == 1 
select new { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name }; 

esto le dará un objeto anónimo con los artículos requeridos. Si necesita usar esto en otro lugar (y no está usando objetos dinámicos), le sugiero que cree un modelo de vista e instaure uno de esos en su selección.

Ejemplo:

public class ProductInfoView 
{ 
    public string Name { get; set; } 
    public int CatalogId { get; set; } 
    public int ManufacturerId { get; set; } 
    public string CatalogName { get; set; } 
    public string ManufacturerName { get; set; } 
} 


from p in Product 
join c in Catalog on c.Id equals p.CatalogId 
join m in Manufacturer on m.Id equals p.ManufacturerId 
where p.Active == 1 
select new ProductInfoView() { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name }; 

Esto hará que incluir su consulta resulta un poco menos doloroso.

Para responder a tu comentario, harás muchas combinaciones si lo único que quieres es el producto. Sus criterios sólo se aseguren tres cosas

  1. bandera activa de su producto es 1
  2. Su producto tiene una entrada de catálogo existente
  3. Su producto tiene una entrada Fabricante existente

Si # 2 y # 3 son superfluos y no necesariamente necesita los nombres, simplemente puede hacer:

from p in Product 
where p.Active == 1 
select p 

Si el Producto es un modelo CRUD, podría potencialmente cargarlo profundamente para incluir información del Fabricante/Catálogo o utilizar el modelo de vista antes mencionado.

¡Buena suerte!