|
Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος Markos στις 10-03-2009, 20:45. Υπάρχουν 15 απαντήσεις.
-
22-02-2009, 17:27
|
-
cap
-
-

-
Μέλος από τις 14-01-2005
-
Βύρωνας, Αθήνα
-
Δημοσιεύσεις 2.750
-
-
|
Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Ψάχνω, ψάχνω, αλλά δεν βρίσκω. Φαίνεται οτι στα διάφορα forums προβληματίζονται με το συγκεκριμένο, αλλά δεν έχουν καταλήξει σε μια γενικά αποδεκτή λύση.
Σε κάτι που δουλεύω έχω την ανάγκη να ορίσω δυναμικά ένα query στο οποίο το όνομα του table και των πεδίων που θέλω να "ρωτήσω" έρχονται δυναμικά ως strings.
Η ερώτηση είναι: Μπορώ να επιτύχω την κατασκευή ενός LINQ statement που να χρησιμοποιεί αυτά τα strings; (Οσο και αν ξέρω οτι το linq δεν συμπαθεί τα strings).
Ο αριθμός των πεδίων είναι σταθερός, τα ονόματα όμως και το πλήθος των tables καθώς και τα ονόματα των πεδίων δεν υπάρχει κανένας τρόπος να είναι γνωστά εξ'αρχής, συνεπώς θα πρέπει ο,τι γίνει να γινει σε runtime.
Φυσικά, με απλό ado.net και χρήση string.format αυτό είναι εφικτό μια και "κατασκευάζω" το query στο runtime. Ομως, θα προτιμούσα να το κάνω σε linq. Εχει κανείς συναντήσει κάτι παρόμοιο, και αν ναι, πώς το αντιμετώπισε;
Σωτήρης Φιλιππίδης DotSee Web Services
|
|
-
22-02-2009, 18:00
|
-
Markos
-
-

-
Μέλος από τις 26-10-2008
-
Αθήνα
-
Δημοσιεύσεις 874
-
-
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Κάτι τέτοιο ζητούσε κι ο Johnnyxp64 σ' αυτό το thread. Δεν έχω υπόψη μου αν υπάρχει κάτι καλύτερο.
Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
|
|
-
22-02-2009, 18:29
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Μήπως είναι καιρός σιγά-σιγά να αφήσουμε το Linq2Sql και να περάσουμε στο Entity Framework; Εκεί το συγκεκριμένο είναι απλό. Το query που μοιάζει παρακάτω με sql είναι για την ακρίβρεια "Entity SQL". 1 2 3 4 5 6 7 8
| using (var context = new NorthwindEntities()) { var queryString = "SELECT P.ProductID, P.ProductName FROM Products AS P WHERE P.ProductID=1"; var query = context.CreateQuery<DbDataRecord>(queryString); var result = query.Execute(System.Data.Objects.MergeOption.NoTracking).Single<DbDataRecord>(); Console.WriteLine(result.GetString(result.GetOrdinal("ProductName"))); Console.WriteLine(result["ProductName"]); } |
Επισυνάπτω sample project. Σημαντική Σημείωση: Όπως και στο ADO.NET έτσι και στο Entity Framework δεν πρέπει να γίνεται string concatenation ή να χρησιμοποιείται η string.format για να δίνονται τιμές στο query. Υπάρχει και εδώ command και parameters που είναι και sql injection safe και ευνοούν την επαναχρησιμοποιήση των execution plan όταν αλλάζουν οι τιμές των παραμέτρων αλλά το υπόλοιπο query μένει το ίδιο. Σημείωση 2: Το DbDataRecord class που φαίνεται στον κώδικα δεν είναι μέρος του Entity Framework. Είναι ακριβώς το ίδιο με αυτό που χρησιμοποιούσαμε και από το ADO.NET. Το πλήρες όνομα άλλωστε είναι System.Data.Common.DbDataRecord.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
22-02-2009, 18:40
|
-
Markos
-
-

-
Μέλος από τις 26-10-2008
-
Αθήνα
-
Δημοσιεύσεις 874
-
-
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Επειδή ασχολήθηκα με τη Linq λίγο όψιμα, δεν μπήκα καν στον κόπο να πειραματιστώ με το Linq2Sql. Κατ' ευθείαν EF! Πάντως και το Dynamic LINQ library υποστηρίζει, απ' ό,τι βλέπω, παραμέτρους. Αυτό που θέλω να ρωτήσω όσον αφορά στο αρχικό post είναι αν χρειάζεται να γίνονται και δυναμικά Joins. Η Dynamic LINQ library δεν πρέπει να υποστηρίζει κάτι τέτοιο.
Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
|
|
-
22-02-2009, 19:07
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Απλοποίηση λίγο τον κώδικά μου παραπάνω.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
22-02-2009, 22:45
|
-
cap
-
-

-
Μέλος από τις 14-01-2005
-
Βύρωνας, Αθήνα
-
Δημοσιεύσεις 2.750
-
-
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
@papadi: Οχι κι εσύ! Διαβάζοντας σε διάφορα forums για το Linq ανακαλύπτω ότι πιθανόν να έκανα λάθος να ασχοληθώ με Dynamic Data σε L2S, μια και η Microsoft φαίνεται να μην το "νταντεύει" τόσο πολύ όσο τα entities... λες να είναι έτσι τελικά;
@gcapnias: Διαπίστωσα οτι τα διάφορα threads για linq είναι χαμένα σε διάφορες περιοχές. Ποιά θα ήταν η πιό καλή περιοχή (από τις υπάρχουσες ή νέα) για να τα μεταφέρουμε όλα;
Σωτήρης Φιλιππίδης DotSee Web Services
|
|
-
22-02-2009, 22:55
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
cap:@papadi: Οχι κι εσύ! Διαβάζοντας σε διάφορα forums για το Linq ανακαλύπτω ότι πιθανόν να έκανα λάθος να ασχοληθώ με Dynamic Data σε L2S, μια και η Microsoft φαίνεται να μην το "νταντεύει" τόσο πολύ όσο τα entities... λες να είναι έτσι τελικά;
Νομίζω ότι αυτό είναι και επίσημο πλέον. Βέβαια πιστεύω ότι θα συνεχίσει να υπάρχει Linq2Sql και στο μέλλον και ίσως να ψιλοεξελιχθεί ίσως, αλλά χωρίς να φτάσει ποτέ το Entity Framework. Το ότι υπάρχει και θα ψιλοεξελιχθεί το στηρίζω στο ότι το ίδιο συμβαίνει και με τα typed datasets. Όλοι πεθαμένα τα έχουν αλλά υπάρχουν και στο .net 3.5 και μάλιστα λίγο βελτιωμένα ως προς τους adapter τους. Φυσικά οι δυνατότητές τους είναι πάντα συγκεκριμένες. cap:@gcapnias: Διαπίστωσα οτι τα διάφορα threads για linq είναι χαμένα σε διάφορες περιοχές. Ποιά θα ήταν η πιό καλή περιοχή (από τις υπάρχουσες ή νέα) για να τα μεταφέρουμε όλα;
Μάλλον πρέπει να κάνουμε ένα rename του ADO.NET section σε Data Access ή κάτι τέτοιο.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
22-02-2009, 22:56
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Αυτό που ζητάς λέγεται Dynamic LINQ query. Αν αλλάξεις τον πίνακα, αλλάξεις και το όνομα των πεδίων, τί νόημα έχει να κρατήσεις σταθερό των αριθμό των πεδίων?
Καταρχήν, υπάρχει ακριβώς αυτό που θες και λέγεται Dynamic LINQ Library. Βρίσκεται στη σελίδα με τα samples του Visual Studio 2008 και περιγράφεται στο σχετικό post του Scott Guthrie. Αυτό που χάνεις βέβαια είναι το type-safety και το Intellisence.
Από την άλλη πλευρά, μπορείς να ξεκινήσεις από ένα πίνακα και να καλέσεις τις μεθόδους που θέλεις επάνω του μία μία:
var r1=orders.Where(...); var r2=r1.Select(...)
Αν έχεις σχετικά μικρά queries, ίσως να βολεύει περισσότερο αυτή η μέθοδος, η οποία διατηρεί type-safety και intellisense.
Όσο για το να αντικαταστήσεις το L2S με EF, θα πρέπει να γίνει αν μπορείς να δικαιλογήσεις το κόστος να προσθέσεις τη λειτουργικότητα που λείπει πάνω από το Entity Framework. To Dynamic Data παίζει και με τα δύο, και το customization είναι ολόκληρη ιστορία από μόνο του. Η αλλαγή στο Data layer δεν πειράζει - και τόσο.
Η ενασχόληση πρώτα με το Linq to SQL δεν νομίζω ότι είναι λάθος, απλά γιατί έτσι μαθαίνεις πως είναι ένα εύχρηστο ORM και μπορείς να το συγκρίνεις με το EF και να αναγνωρίσεις τα σημεία στα οποία λείπουν λειτουργίες και θα πρέπει να τις προσθέσεις εσύ. Κάποιος ο οποίος ξεκινάει με EF μπορεί π.χ. να θεωρεί ότι η χρήση των EntityKeys ή EntityReferences μέσα στον business κώδικα είναι θεμιτή. Κάποιος ο οποίος έχει ξεκινήσει από άλλο ORM αναγνωρίζει αμέσως ότι πρόκειται για κάτι που αφορά μόνο το Data Layer και δεν πρέπει να βγει έξω από αυτό. Ο πρώτος μπορεί να γεμίσει τον κώδικα του με EntityKeys και EntityReferences. Ο δεύτερος μάλλον θα ψάξει τρόπο να τα κρύψει πίσω π.χ. από ένα Repository.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
-
23-02-2009, 12:48
|
-
nikolaosk
-
-

-
Μέλος από τις 28-04-2007
-
Αθήνα
-
Δημοσιεύσεις 1.418
-
-
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
σωτήρη,
όσο αφορά το τι θα γίνει στο μέλλον με το LINQ2SQL Μπορείς να το δεις από το Blog Της ado.net team και πιο ειδικά από τον Tim Mallalieu(
Program Manager, LINQ to SQL and Entity Framework). Κάπου γράφει
http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx
"We’re making significant investments in the Entity Framework such that as of .NET 4.0 the Entity Framework will be our recommended data access solution for LINQ to relational scenarios. We are listening to customers regarding LINQ to SQL and will continue to evolve the product based on feedback we receive from the community as well"
το παραπάνω μου θυμίζει, ένα γνωστό άσμα του λευτέρη παπαδόπουλου, "Λούζεται η αγάπη μου στο Γουαλδακιβίρ!!!!"
Νικόλαος Καντζέλης BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
|
|
-
25-02-2009, 00:35
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Δεν πιστεύω ότι κάτι λούζεται, όπου... 
Η στροφή της Microsoft από το LINQ to SQL σε κάτι μεγαλύτερο, πυροδότησε κάτι που μόνο με την επιμονή των developers να χρησιμοποιούν VB6 μπορεί να συγκριθεί. Με μια απλή αναζήτηση στο google με το LINQ to SQL T4, κάποιος θα δεί ότι έχουν βγει πολλά T4 templates που αντικαθιστούν το custom tool του LINQ to SQL. Τα καινούργια templates, προσθέτουν λειτουργίες που λείπουν από την αρχική υλοποίηση του LINQ to SQL, αλλά και διορθώνουν ατέλειες.
Οπότε, ποιος χρειάζεται να τα εξελίξει η Microsoft, και ποιος ισχυρίζεται ότι το LINQ to SQL έχει πεθάνει; 
George J.
|
|
-
26-02-2009, 18:37
|
-
Johnnyxp64
-
-

-
Μέλος από τις 30-08-2008
-
Earth
-
Δημοσιεύσεις 554
-
-
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
George J. Capnias:Δεν πιστεύω ότι κάτι λούζεται, όπου... 
Η στροφή της Microsoft από το LINQ to SQL σε κάτι μεγαλύτερο, πυροδότησε κάτι που μόνο με την επιμονή των developers να χρησιμοποιούν VB6 μπορεί να συγκριθεί. Με μια απλή αναζήτηση στο google με το LINQ to SQL T4, κάποιος θα δεί ότι έχουν βγει πολλά T4 templates που αντικαθιστούν το custom tool του LINQ to SQL. Τα καινούργια templates, προσθέτουν λειτουργίες που λείπουν από την αρχική υλοποίηση του LINQ to SQL, αλλά και διορθώνουν ατέλειες.
Οπότε, ποιος χρειάζεται να τα εξελίξει η Microsoft, και ποιος ισχυρίζεται ότι το LINQ to SQL έχει πεθάνει; 
George J.
wow δεν το γνωριζα αυτο Γιωργο ευχαριστω, μου εδωσες τροφη για το Πασχα :)
This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
|
|
-
10-03-2009, 15:55
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Αν και είναι είναι ξεκάθαρο να μεταφέρω και μια πιο επίσημη και μάλιστα φρέσκια εκδοχή. Τώρα που ήμουν στο Seattle για το MVP Summit, κατά τη διάρκεια παρουσίασης για το Entity Framework, ο Daniel Simmons (Development Manager για το EF και το Linq2Sql) διέκοψε μια άλλη παρουσίαση για να σηκωθεί και να πει με τον πιο ξεκάθαρο τρόπο το εξής: Το Linq2Sql ΔΕΝ θα καταργηθεί. Θα όμως βελτιωθεί όμως ελάχιστα στο μέλλον. Συγκεκριμένα έκανε τον παραλληλισμό WPF και Windows Forms, όσο επιτυχημένος μπορεί να είναι αυτός. Είπε λοιπόν ότι ο σωστός τρόπος πλέον να γράφεις κανείς UI είναι με WPF. Τα Windows Forms όμως δεν θα καταργηθούν ποτέ και μάλιστα είπε "μας αρέσει όταν ο κόσμος τα χρησιμοποιεί". Τα συμπεράσματα δικά σας and don't shoot the messenger. Υπάρχουν κι άλλες, πολύ ενδιαφέρουσες εξελίξεις στο θέμα Entity Framework και αλλαγές που θα έρθουν πιο σύντομα από ότι περιμέναμε. Με δεσμεύει προς το παρόν το NDA (Non-Disclosure Agreement) που έχω υπογράψει, αλλά υπόσχομαι να επανέλθω μόλις μπορέσω.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
10-03-2009, 19:54
|
-
nikolaosk
-
-

-
Μέλος από τις 28-04-2007
-
Αθήνα
-
Δημοσιεύσεις 1.418
-
-
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
Δημήτρη,
ευχαριστούμε για τις Inside Πληροφορίες.....
φυσικά και δεν μπορούνε να φύγουνε έτσι εν μια νυκτί (ούτε ποτέ) τα window forms και Linq2Sql....
Μου θυμίζει κάποιους που αναρωτιούνται αν θα συνεχίσει η MS να υποστηρίζει την VB, επειδή βλέπουνε πολλά samples Και βιβλία σε C#.... 
το NDA , σε δεσμεύει και στο Bulldog? από ότι ξέρω το Bulldog είναι ιερό έδαφος όπου όλοι μιλάνε ελεύθερα....
όπως κάτι μέρη που πηγαίνανε οι Σιου, και δεν μπορούσανε να κάνουνε πόλεμο....
αν δεν υπάρχει αυτός ο όρος να το βάλεις την άλλη φορά.
και αν όχι να σε μεθύσουμε να μας πεις...
Νικόλαος Καντζέλης BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
|
|
-
10-03-2009, 20:11
|
|
Απ: Linq2SQL - Μπορώ να προσδιορίσω δυναμικά το όνομα του table στο FROM και τα πεδία που θα διαλέξω;
nikolaosk:το NDA , σε δεσμεύει και στο Bulldog? από ότι ξέρω το Bulldog είναι ιερό έδαφος όπου όλοι μιλάνε ελεύθερα....
Γιατί το λες αυτό; Το NDA ισχύει παντού. Άλλωστε τα νέα δεν θα αργήσουν να ανακοινωθούν. Υπομονή!
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
Σελίδα 1 από 2 (16 εγγραφές)
1
|
|
|