evagelos_21 Δημοσ. 16 Ιουλίου 2012 Δημοσ. 16 Ιουλίου 2012 Γεια σας παιδιά, Εχω ένα dataset με 2 στήλες Α|Β 1|1213 1|111 1|12345 2|1112 2|2223 3|2234 3|6543 3|23234 3|213213 4|0976 θα ήθελα όταν αλλάζει η τιμή της στήλης Α, τότε να φτιάνχω ένα xml Element με Β Attribute. Στο παραπάνω παράδειγμα θα έχω 3 Element με 3,2,4,1 Attributes αντίστοιχα ευχαριστώ
defacer Δημοσ. 16 Ιουλίου 2012 Δημοσ. 16 Ιουλίου 2012 Τι dataset είναι αυτό; Πόσα tables έχει; Πώς ονομάζονται; Τι εννοείς θέλεις να φτιάξεις xml element? XmlElement? XElement? Χύμα XML string θέλεις; Αν όχι, σε τι document θα μπει το element? Πού είναι το document? Εγώ φταίω όταν γίνομαι σαρκαστικός ή οι ερωτήσεις που χρειάζεσαι κρυστάλλινη σφαίρα για να καταλάβεις τι θέλει ο καθένας;
evagelos_21 Δημοσ. 16 Ιουλίου 2012 Μέλος Δημοσ. 16 Ιουλίου 2012 έχεις δίκιο αλλά πίστευω πως είχα καλύψει σφαιρικά το θέμα λοιπόν: dataset: 1 table 2 columns (code, barcode) xml element => XMLElement Βασικά η ερώτησή μου είναι πως θα το κάνω και όχι πως θα γεμίσω το XmlElement ή το XElement. εκτός απτο να κάνω 2 sql queries και να κάνω 2 loop στα queries ρωτησα αν υπάρχει άλλος τρόπος. Αυτην την στιγμή το φτιάχνω έτσι: κάνω : > select count (v.code)count , v.code from data v group by v.code for (int a = 0; a < dtGroup1.Rows.Count; a++) { και μετά νέο query: > select v.code, v.barcode from data v and v.code = " + "'" + dtGroup1.Rows[a]["code"].ToString() + "'" και μετά για κάθε ένα που βρίσκω φτιάνχω το string μου > for (int b = 0; b < dtGroup2.Rows.Count; b++) { ptree = ptree + dtGroup2.Rows[b]["barcode"].ToString() + ","; } και μετά φτιάχνω το element κάπως έτσι: > writer.WriteStartElement("ProductTree"); writer.WriteAttributeString("Code", dtGroup1.Rows[a]["code"].ToString() ); <=Εδώ θα μπει ο κωδικόες το είδους writer.WriteAttributeString("barcode", ptree.Substring(0, ptree.Length - 1); <= Εδώ θα μπουν τα barcodes χωρισμένα με κομμα (,) writer.WriteEndElement(); παρεμβάλονται και άλλα elements και κάποια στιγμή κλείνω το document κάπως έτσι: > writer.WriteEndDocument(); Απλά ρωτάω μηπως με C# κώδικα είναι πιο απλό ή πιο γρήγορο (αν και έτσι πάει καλά)
παπι Δημοσ. 16 Ιουλίου 2012 Δημοσ. 16 Ιουλίου 2012 Αν καταλαβα καλα, θες αυτο το xml ><?xml version="1.0"?> <TestObjectRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <products> <product id="1" barcodes="1111,1112,1113" /> <product id="2" barcodes="1114,1115" /> </products> </TestObjectRoot> Δεν μπορω να καταλαβω πως το εχεις κανει, αλλα με συνδυασμο του linq2sql & linq2xml ειναι αρκετα απλο >namespace WindowsFormsApplication2 { public class TestObject { [XmlAttribute(AttributeName="id")] public int id; [XmlAttribute(AttributeName="barcodes")] public string barcodes; } public class TestObjectRoot { [XmlArray(ElementName="products")] [XmlArrayItem(ElementName="product")] public TestObject[] products; } public partial class Form1 : Form { public Form1() { InitializeComponent(); blogEntities test = new blogEntities(); List<TestObject> tos = new List<TestObject>(); var res = from t in test.Table1 group t by t.id into id_barcodes orderby id_barcodes.Key select id_barcodes; foreach (var group in res) { tos.Add(new TestObject { id = group.First().id, barcodes = string.Join(",", group.Select(s => s.barcode)) }); } XmlSerializer writer = new XmlSerializer(typeof(TestObjectRoot)); writer.Serialize(System.IO.File.Create("test.xml"), new TestObjectRoot { products = tos.ToArray() }); } } } εδιτ: Αγαπαμε c# linq εδιτ1: Βασικα αυτο δεν ειναι linq2xml αλλα xml object serialization.. δεν πειραζει!!! αγαπαμε και object serialization
defacer Δημοσ. 17 Ιουλίου 2012 Δημοσ. 17 Ιουλίου 2012 Για να καταλάβω: τα sql queries που δίνεις... κάνεις το πρώτο, και μετά σε loop για κάθε row του αποτελέσματος κάνεις το δεύτερο; Αν ναι, τότε πρέπει να ξεκινήσεις αλλάζοντας τα N+1 queries σε απλά 1 με join.
evagelos_21 Δημοσ. 18 Ιουλίου 2012 Μέλος Δημοσ. 18 Ιουλίου 2012 Για να καταλάβω: τα sql queries που δίνεις... κάνεις το πρώτο, και μετά σε loop για κάθε row του αποτελέσματος κάνεις το δεύτερο; Αν ναι, τότε πρέπει να ξεκινήσεις αλλάζοντας τα N+1 queries σε απλά 1 με join. ναι αυτό κάνω
defacer Δημοσ. 18 Ιουλίου 2012 Δημοσ. 18 Ιουλίου 2012 ναι αυτό κάνω ΟΚ, δώσε τότε αν θες την πλήρη μορφή των queries για να το πιάσουμε απο κει.
evagelos_21 Δημοσ. 18 Ιουλίου 2012 Μέλος Δημοσ. 18 Ιουλίου 2012 τι εννοείς πλήρη; αυτά που έδωσα παραπάνω δεν κάνουν; Δεν έχω άλλα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα