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

 

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

Linq query με grou by και where σε VB.net

Îåêßíçóå áðü ôï ìÝëïò manosB. Τελευταία δημοσίευση από το μέλος manosB στις 25-05-2009, 08:47. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  22-05-2009, 10:39 50884

    Linq query με grou by και where σε VB.net

    Παιδιά έχω πρόβλημα με σύνταξη με Linq και group by σε VB.net

    έχω ένα Datatable να το πούμε dtOrder
    έχει μεταξύ άλλων 2 πεδία, ένα Cusid και ένα Amount 
    Θέλω με ένα linq query να πάρω το άθροισμα του Amount ανά Cusid σε μια DataRow Collection  για ποσά πάνω από 15.
    Να σας στο γράψω σε SQL: select cusID, sum(Amount) from dtOrders Where Amount>15 order by cusID 

    Το αποτέλεσμα το θέλω σε ένα Datarow() collection





    Manos
  •  22-05-2009, 11:21 50887 σε απάντηση της 50884

    Απ: Linq query με grou by και where σε VB.net

    γεια σου φιλε,

    για να μην σου δώσω έτοιμη τροφή και μπορεί να ειναι και λίγο εκτος απο αυτό που θες, πηγαινε εδω και κατέβασε τον converter αυτον http://www.sqltolinq.com/

    θα του δωσεις πολυ απλά τα στοιχεια του connection σου οπως ακριβώς τα έχεις στο προγραμμά σου και τα αρχεια του datacontext και αφου διαλέξεις γλωσσα σύνταξης vb / c# 

    βάζεις στα αριστερα το SQL query Που εγραψες εδω με το πατημα ενος κουμπιου στο γραφει αυτο σε linq! Geeked

    ελπιζω να σου κανει.


    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  22-05-2009, 11:32 50889 σε απάντηση της 50887

    Απ: Linq query με grou by και where σε VB.net

    Έχω ήδη φορτωμένο το Datatable (dtOrrders) μου με Data. Το Sql Statement το έγραψα για να δείξω τι ακριβώς θέλω να κάνω. Εκτός από την ίδια τη Linq αντιμετοπίζω και προβλήματα στο Casting. Θα προτιμούσα να μην μπλέξω με έτοιμα προγραμματάκια και να δω λίγο κώδικα. Σε ευχαριστώ πάντως.Big Smile
    Manos
  •  22-05-2009, 12:09 50894 σε απάντηση της 50884

    Απ: Linq query με grou by και where σε VB.net

    Καλημέρα, Μάνο. Ρϊξε μια ματιά στο Linq To Dataset Samples. Νομίζω ότι εκεί καλύπτει πάρα πολλές περιπτώσεις για ό,τι χρειαστεί κανείς.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  22-05-2009, 13:14 50897 σε απάντηση της 50894

    Απ: Linq query με grou by και where σε VB.net

    Μάρκο από εκεί ξεκίνησα αλλά λόγω explict τα samples δεν δουλεύουν σωστά στη vb.net. Και έχω θέμα...
    Manos
  •  22-05-2009, 13:33 50898 σε απάντηση της 50894

    Απ: Linq query με grou by και where σε VB.net

    Αυτό που ζητάει ο Μάνος δεν έχει να κάνει με το πως μετατρέπεις ένα SQL statement σε LINQ. Το LINQ to Dataset είναι κομματάκι περίεργο και θέλει τα δικά του κόλπα. Ο Μάρκος έχει δίκιο, στα samples θα βρεις πως γίνονται τα διάφορα aggregations, groupings κλπ.

    Όσον αφορά την αρχική ερώτηση, το query μπορείς να το γράψεις κάπως έτσι:

    var largeOrders = from order in nwSet.Orders.AsEnumerable()
                                  where order.Amount> 5
                                  group order by order.CustomerID
                                  into customerOrders
                                      orderby customerOrders.Key
                                      select new {CustomerID=customerOrders.Key, Total = customerOrders.Sum(o => o.Amount)};

    Μετά τα πράγματα γίνονται λίγο περίεργα. Μπορείς να μετατρέψεις τα αποτελέσματα ενός Linq to Dataset query σε DataTable με την CopyToDataTable εφόσον το αποτέλεσμα του query μετατρέπεται σε Datarow. Θα μπορούσες δηλαδή να γράψεις DataTable myTable=largeOrders.CopyToDataTable<DataRow>(). Δυστυχώς, το select επιστρέφει ένα anonymous type το οποίο δεν μετατρέπεται σε DataRow. Ούτε το group customerOrders μπορεί να μετατραπεί σε DataRow και τέλος το DataRow δεν έχει κάποιο constructor τον οποίο να μπορείς να χρησιμοποιήσεις και να γράψεις π.χ. new DataRow(CustomerID ...

    Η μόνη λύση που βρήκα μέχρι στιγμής είναι να γεμίσω ένα πίνακα με το χέρι με τα αποτελέσματα του query

    DataTable newTable=new DataTable();
    newTable.Columns.Add("CustomerID", typeof (string));
    newTable.Columns.Add("Total", typeof (decimal));
                
    foreach (var order in largeOrders)
    {
        newTable.Rows.Add(order.CustomerID, order.Total);
    }

    Δεν είναι αυτό που θα ήθελα, αλλά τώρα μπορώ να χρησιμοποιήσω τον πίνακα π.χ. για data binding. Ακόμα καλύτερα, μπορώ να φτιάξω ένα πίνακα στο DataSet π.χ. LargeOrdersDataTable και να χρησιμοποιήσω αυτό τον τύπο αντί για χύμα DataTable.

    Υ.Γ. Για να δουλέψουν τα extension methods τα οποία αφορούν Datasets πρέπει οπωσδήποτε να προστεθεί το using System.Data.DataSetExtensions;

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-05-2009, 20:48 50903 σε απάντηση της 50897

    Απ: Linq query με grou by και where σε VB.net

    Αν και ουσιαστικά έχει απαντήσει ο Παναγιώτης, αν θέλεις να το κάνεις σε VB, συνδύασε το link για το GroupBy με εκείνο του Sum - Grouped. Δε χρησιμοποιώ τη VB και μου βγήκε λίγο ή... πίστη! Πάντως ο παρακάτω κώδικας, σε δική μου βάση, δούλεψε:

    Dim groupQuery = (From sl In sucklingLossesDT.AsEnumerable() _
                           Where sl.PigletNumber > 1 _
                           Group sl By SowCodeID = sl.CodeID Into TotalLosses = Group _
                           Select SowID = SowCodeID, _
                                  TotalPiglets = TotalLosses.Sum(Function(sl) sl("PigletNumber"))).ToList()
    Κάποιος με μεγαλύτερη εμπειρία στη VB θα σε διαφωτίσει περισσότερο. Ελπίζω να βοήθησα...

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  25-05-2009, 08:47 50925 σε απάντηση της 50903

    Απ: Linq query με grou by και where σε VB.net

    Λοιπόν παλικάρια ποιος είναι ο χρυσός κανόνας όταν δοκιμάζεις κάτι νέο!!!!Smile

    Κάνε το σε ΚΑΙΝΟΥΡΙΟ Project.!!!! Το Solution ήταν από upgrade αλλά δεν είχαν πάει όλα τα references των Project σε 3.5. Για αυτό δεν μου έπαιζε τίποτα!!

    Αν δείτε αυτόν τον Μέρφυ πείτε του ότι τον ψάχνωSuper Angry

    Εννοείται ότι στο νέο Project έπαιξαν όλα τα παραδείγματα του MSDN και σε 10 λέπτα είχα κάνει τη δουλειά μου!!!!!!

    Σας ευχαριστώ για τις απαντήσεις Παναγιώτη και Μάρκο. Παναγιώτη έχεις ταλέντο τελικά να μαντεύεις το λάθος. Είναι βρε παιδιά κάποιες μέρες σε αυτή τη δουλειά που δεν παλεύονται με τίποτα τελικά!!!!!! #$^%#@$^%$@^$&%@$^& ευτυχώς όμως δεν είναι όλες έτσι.

    Manos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems