Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Multiple Linq joins, ποιος είναι ο εσωτερικός τους μηχανισμός??

Îåêßíçóå áðü ôï ìÝëïò pontifikas. Τελευταία δημοσίευση από το μέλος nikolaosk στις 10-02-2011, 20:06. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-02-2011, 17:16 63180

    Multiple Linq joins, ποιος είναι ο εσωτερικός τους μηχανισμός??

    Προσπαθώ να μεταφέρω ένα σενάριο SQL πολλαπλών temporary tables πάνω στα οποία κάνω μια σειρά από inner joints, σε LINQtoSQL

    Αντί για πολλαπλά tables λοιπόν έχω πολλαπλά collections με το SQL από 
    select Μπλα μπλα
    from (((((Table1 
    inner join #col1 on #col1.to_1_ID = Table1_ID)
    inner join #col2 on #col2.to_1_ID = Table1_ID)
    inner join #col3 on #col3.to_1_ID = Table1_ID)
    inner join #col4 on #col4.to_1_ID = Table1_ID)
    inner join #col5 on #col5.to_1_ID = Table1_ID)
    inner join #col6 on #col6.to_1_ID = Table1_ID

    γίνεται σε κώδικα:
     var simple = from t1 in dbContext.Table1
                             join col1 in Collection1 on Table1.Table1_ID equals col1.to_1_ID
                             join col2 in Collection2 on Table1.Table1_ID equals col2.to_1_ID
                             join col3 in Collection3 on Table1.Table1_ID equals col3.to_1_ID
                             join col4 in Collection4 on Table1.Table1_ID equals col4.to_1_ID
                             join col5 in Collection5 on Table1.Table1_ID equals col5.to_1_ID
                             join col6 in Collection6 on Table1.Table1_ID equals col6.to_1_ID
                             select new {Μπλα μπλα}
    Εκτελώντας το SQL στον SQL server, το αποτέλεσμα εμφανίζεται άμεσα. Εκτελώντας το LINQ κομμάτι μετά από ένα λεπτό τρώω στην μάπα Connection Timeout.
    Αν όμως αλλάξω το LINQ ώστε κάθε collection να αναφέρεται στο κλειδί μέσω των entity references, και όχι με το δικό του foreign key:
     var simple = from t1 in dbContext.Table1
                             join col1 in Collection1 on Table1.Table1_ID equals col1.to_1_ID
                             join col2 in Collection2 on col1.Table1.Table1_ID equals col2.to_1_ID
                             join col3 in Collection3 on col2.Table1.Table1_ID equals col3.to_1_ID
                             join col4 in Collection4 on col3.Table1.Table1_ID equals col4.to_1_ID
                             join col5 in Collection5 on col4.Table1.Table1_ID equals col5.to_1_ID
                             join col6 in Collection6 on col5.Table1.Table1_ID equals col6.to_1_ID
                             select new {Μπλα μπλα}

    τότε δουλεύει κανονικά.
    Γιατί συμβαίνει αυτό??


  •  10-02-2011, 20:06 63190 σε απάντηση της 63180

    Απ: Multiple Linq joins, ποιος είναι ο εσωτερικός τους μηχανισμός??

    Σαν μια πρώτη πρόταση, θα μπορούσες να ανοίξεις τον SQL Server Profiler και να δεις τι SQL κώδικα παράγει το LINQ to SQL engine στις 2 περιπτώσεις.Επέλεξε σίγουρα τα 3 αυτά events

    RPC:Starting,SQL:BatchStarting,SQL:BatchCompleted του profiler.


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems