Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά,

 

Εχω ένα 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 αντίστοιχα

 

ευχαριστώ

Δημοσ.

  1. Τι dataset είναι αυτό; Πόσα tables έχει; Πώς ονομάζονται;
  2. Τι εννοείς θέλεις να φτιάξεις xml element? XmlElement? XElement? Χύμα XML string θέλεις; Αν όχι, σε τι document θα μπει το element? Πού είναι το document?

 

 

Εγώ φταίω όταν γίνομαι σαρκαστικός ή οι ερωτήσεις που χρειάζεσαι κρυστάλλινη σφαίρα για να καταλάβεις τι θέλει ο καθένας;

 

Δημοσ.

έχεις δίκιο αλλά πίστευω πως είχα καλύψει σφαιρικά το θέμα

λοιπόν:

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# κώδικα είναι πιο απλό ή πιο γρήγορο (αν και έτσι πάει καλά)

Δημοσ.

Αν καταλαβα καλα, θες αυτο το 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 wub.gif

εδιτ1: Βασικα αυτο δεν ειναι linq2xml αλλα xml object serialization.. δεν πειραζει!!! αγαπαμε και object serialization happy.gif

Δημοσ.

Για να καταλάβω: τα sql queries που δίνεις... κάνεις το πρώτο, και μετά σε loop για κάθε row του αποτελέσματος κάνεις το δεύτερο; Αν ναι, τότε πρέπει να ξεκινήσεις αλλάζοντας τα N+1 queries σε απλά 1 με join.

Δημοσ.

Για να καταλάβω: τα sql queries που δίνεις... κάνεις το πρώτο, και μετά σε loop για κάθε row του αποτελέσματος κάνεις το δεύτερο; Αν ναι, τότε πρέπει να ξεκινήσεις αλλάζοντας τα N+1 queries σε απλά 1 με join.

 

ναι αυτό κάνω

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...