2015-06-30 22 views
5

Ho 3 tabelle senza chiavi esterne (è un db legacy, quindi non posso cambiarlo). Il modello sarà qualcosa di simile (codice SQL):Linq a 3 tabelle senza chiavi esterne

Select 
    PROD.ProductoId, 
    PROD.Descripcion, 
    STK.StockActual, 
    DEPO.DepositoId, 
    DEPO.Descripcion 
From 
    Productos PROD, 
    Stock  STOK, 
    Depositos DEPO 
where 
    PROD.ProductoId = STOK.ProductoId 
    and DEPO.DepositoId = STOK.DepositoId 

Come posso fare per ottenere gli stessi risultati con Linq su C#?

+1

Off-topic: specificare tavolo si unisce in modo esplicito, vale a dire utilizzando la sintassi 'JOIN':' ... FROM Prodotti CODICE ENTRA della STOK SU CODICE .ProductoId = STOK.ProductoId JOIN Depositos DEPO ON DEPO.DepositoId = STOK.DepositoId'. Vedi [questo Programmatori SE Q & A] (http://programmers.stackexchange.com/questions/78225/using-join-keyword-or-not) per i motivi per cui farlo. – stakx

risposta

2

Prova questo:

var result = from prod in _context.Productos 
      join stok in _context.Stocks on prod.ProductoId equals stok.ProductoId 
      join depo in _context.Depositos on stok.DepositoId equals depo.DepositoId 
      select new 
      { 
       ProductoId = prod.ProductoId, 
       ProductoDescripcion = prod.Descripcion, 
       StockActual = stok.StockActual, 
       DepositoId = depo.DepositoId, 
       DepositoDescripcion = depo.Descripcion 
      }; 
+0

Ci proverò e poi posterò il risultato! Grazie!! –

+0

Certo, non sono sicuro che sia corretto. Ho appena iniziato a usare linq da solo. –

+0

Penso che dopo il primo join dovresti selezionare PROD.ProductoId, PROD.Descripcion, STK.StockActual, STOK.DepositoId in una nuova tabella e partecipare al tuo nuovo tavolo con la tabella di deposito –

2

Perché non creare una visualizzazione in Sql e quindi aggiornare il modello, in questo modo è possibile eseguire query dalla classe View.

+0

Tks ma non riesco a creare nulla nel db perché proviene da un sistema di terze parti. –

1

Prova questa:

consiglio
var Query = from data in _db.Productos 
join stock in _db.Stock on data.ProductId equals stock.ProductoId 
join Depositos in _db.Depositos on data.DepositoId equals Depositos.DepositoId 
select new { ProductoId,Descripcion, StockActual,DepositoId,Descripcion}; 
Problemi correlati