944 messaggi dal 11 febbraio 2013
ciao
debbo fare un inner join tra tre tabelle
una delle tre ha relazioni con entrambe.

Ho provato quanto segue ma va in timeout perchè indagando l'sql prodotto inserisce due volte la tabella
con alias ovviamente diversi... ma essendo la tabella enorme va in errore di timeout
 var q = from tb in db.TESTATE.AsNoTracking()
                    join rb in db.RIGHE.AsNoTracking() on new
                    {
                        ANNO = ...,
                     ...
                        NUMERO_BOLLA = .
                    }
                    equals new
                    {
                        ANNO = ...,
                     ...
                        NUMERO_BOLLA = ...
                    }
                    
                    join cd in db.DIBA.AsNoTracking() on new
                    {
                        ANNO = ...,
                        CODICE_TIPO = (short)...,    
                      ....
                        TIPO_DOCUMENTO = ....
                    }
                    equals new
                    {
                        ANNO =...,
                        CODICE_TIPO =...,   
                      ...
                        TIPO_DOCUMENTO = ...
                    }
                    join cdb in db.DIBA on rb.... equals cdb....
                    where ...
                    select new { ARTICOLO = cd.CODE, QUANTITA = cd.QTA };

.
Modificato da jjchuck il 21 settembre 2017 18.56 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, non dovresti scrivere delle join ma usare le proprietà di navigazione. Leggi queste altre discussioni:

http://forum.aspitalia.com/forum/post/399742/LINQ-SQL-Left-Outer-Join-Multiple.aspx
http://forum.aspitalia.com/forum/post/403951/Perche-LINQ-Volte-Terrbilmente-Lento-.aspx

ciao,
Moreno

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
ciao Moreno...buongiorno

conoscevo già questa possibilità ma ogni volta che ci provo (dopo aver creato l'associazione) non accedo alla proprietà del'entità associata (t.tabella1.proprietàTabella2)

cmq ora è un buona occasione per riprovare

magari tralascio qualcosa dopo aver creato l'assiociazione...

Ho creato l'assiociazione fra i campi chiave e nella parte 1 (di uno a molti)
la classe è cosi

public partial class TESTATE
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public TESTATE()
        {
            this.RIGHE = new HashSet<RIGHE >();
        }
    
        public short Anno { get; set; }
        ...
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<RIGHE> RIGHE { get; set; }


se provo ad accedere ai campi l'intellisense non me li propone
mi restituisce solo RIGHE

var q = from t in db.TESTATE                  
                    select t.RIGHE.XXX;


Ma cosa tralascio...mi fa impazzire ogni volta

Quel che posso fare è questo

var q2 = from b in db.TESTATE
                     where ...
                     select b; 
            foreach (TESTATE t in q2)
            {
                int i = 1;
                foreach (RIGHE r in t.RIGHE) {
                    Response.Write(i + "_" + t.Documento + "_" + r.Articolo + "<BR/>");
                    i++;
                }
            }


e coincide con il risultato che otterrei da sql

solo come dicevo prima non riesco ad accedere alla proprietà direttamente come nel link che mi suggerisci
perdonami ma non ci arrivo
Modificato da jjchuck il 22 settembre 2017 11.02 -
944 messaggi dal 11 febbraio 2013
Ho notato che partendo dalle righe posso accedere alle testate

                from t in db.RIGHE
                   select new { CLIENTE = t.TESTATE.CodiceCliente, ARTICOLO = t.CodiceArticolo };

                                    };


e questo è già qualcosa.

ora vorrei creare un associazione fra una tabella INDIRIZZI_CLIENTI e TESTATE

provando a aggiungere come ho fatto per le tabelle righe e testate non mi fa cambiare i campi ...ovvero
mi propone i campi chiave di TESTATE-RIGHE ma quelli a me non servono me ne servono altri due

come faccio ?
Modificato da jjchuck il 27 settembre 2017 18.14 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.