C# join 2 Tabelle in DataTable

uniek123

Cadet 1st Year
Registriert
Aug. 2012
Beiträge
10
Ich habe ein kleines Problem, möchte zwar 2 Tabelle, Spalte "KundenName" anhand DataRelation oder Linq verknüpfen.

Hier ist mein Code:
Code:
          DataTable table = new DataTable("Kunde");   
          table.Columns.Add("KundeID", typeof(Int32)); 
          table.Columns.Add("KundeName", typeof(String));
          table.Columns.Add("Produkt", typeof(String));
 
          table.PrimaryKey = new DataColumn[] { table.Columns["KundeID"] }; 
 
          DataTable comment = new DataTable("Comment");
 
            comment.Columns.Add("KundeName", typeof(String));
            comment.Columns.Add("Comment", typeof(String));
            comment.PrimaryKey = new DataColumn[] { comment.Columns["KundeName"] };
 
            DataSet ds = new DataSet("DataSet");
 
            ds.Tables.Add(table);
            ds.Tables.Add(comment);
 
            object[] o1 = { 1, "Michael", "Jogurt" };
            object[] o2 = { 2, "Raj", "Cola" };
            object[] o3 = { 3, "Gary", "Fanta" };
 
            object[] c1 = { "Raj", "Ich bin cool" }; 
            object[] c2 = { "Gary", "yahoo" };
            object[] c3 = { "Michael", "nichts zu verlieren" };
 
            comment.Rows.Add(c1);
            comment.Rows.Add(c2);
            comment.Rows.Add(c3);
 
           table.Rows.Add(o1);  
           table.Rows.Add(o2);    
           table.Rows.Add(o3);

Kann mir jemand beibringen wie es weiter mit Relation oder Linq machen kann. Ich bin sehr dankbar
 
Zuletzt bearbeitet:
durchgelesen habe ich schon. Aber irgendwie hat es sich nicht geklappt.

DataRelation:

Code:
            DataRelation drel = new DataRelation("EquiJoin", 
            table.Column["KundeName"],comment.Columns["KundeName"]);
            ds.Relations.Add(drel);

aber wie geht es weiter? wie kann ich dann die Werte ausgeben?


Linq:

Code:
 var results = from table1 in table.Rows.Cast<DataRow>()
                     join table2 in comment.Rows.Cast<DataRow>()
                     on (string)table1["KundeName"] equals (string)table2["KundeName"]

                     select table1;

hier weiss ich auch nicht, wie man danach die Werte ausgibt
 
Zuletzt bearbeitet:
Analog zum unteren Beispiel.
Durchlaufe deine Variable mit einer foreach-Schleife

Code:
class IntroToLINQ
{        
    static void Main()
    {
        // The Three Parts of a LINQ Query:
        //  1. Data source.
        int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

        // 2. Query creation.
        // numQuery is an IEnumerable<int>
        var numQuery =
            from num in numbers
            where (num % 2) == 0
            select num;

        // 3. Query execution.
        foreach (int num in numQuery)
        {
            Console.Write("{0,1} ", num);
        }
    }
}
 
Code:
var results = from table1 in table.AsEnumerable()
                          join table2 in comment.AsEnumerable()
                          on table1.Field<string>("SignalName") equals table2.Field<string>("SignalName")
                          select table1;
            foreach(string dr in results)
            {
                Console.WriteLine("{0,1}", results);
            }

            Console.ReadKey();

es zeigt Feher:

Fehler 1 Eine Konvertierung vom Typ "System.Data.DataRow" in "string" ist nicht möglich.
 
.ToString() Methode gibt es doch für fast alle Datentypen

Code:
foreach (var item in custQuery)
{
    Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}

Mit diesem Beispiel sollte es klappen.
 
Zuletzt bearbeitet:
Ich habe es geschafft, danke SymA.

Mein Code:
Code:
var results = from table1 in table.AsEnumerable()
                          join table2 in comment.AsEnumerable()
                          on table1.Field<string>("KundeName") equals table2.Field<string>("KundeName")
                          select new
                              {
                                  KundeID = table1.Field<Int32?>("KundeID"),
                                  KundeName = table1.Field<String>("KundeName"),
                                  Produkt = table1.Field<String>("Produkt"),

                                  Comment = table2.Field<String>("Comment")
                              };

            foreach (var item in results)
            {
                Console.WriteLine(String.Format("{0}    {1}    {2}    {3}", item.KundeID, item.KundeName, item.Produkt, item.Comment));
            }


Jedoch habe ich noch eine Frage, wenn ich noch ein Objekt in Tabelle 1 einfüge, also insgesamt 4 und mit Linq diese 2 Tabelle join mache, dann ist nur 3 Objekte zu sehen.

Code:

Code:
            object[] o1 = { 1, "Michael", "Jogurt" };
            object[] o2 = { 2, "Raj", "Cola" };
            object[] o3 = { 3, "Gary", "Fanta" };
            object[] o4 = { 4, "Miky", "Sprite" };

            object[] c1 = { "Raj", "Ich bin cool" };
            object[] c2 = { "Gary", "yahoo" };
            object[] c3 = { "Michael", "nichts zu verlieren" };

            comment.Rows.Add(c1);
            comment.Rows.Add(c2);
            comment.Rows.Add(c3);



            table.Rows.Add(o1);
            table.Rows.Add(o2);
            table.Rows.Add(o3);
            table.Rows.Add(o4);

            var results = from table1 in table.AsEnumerable()
                          join table2 in comment.AsEnumerable()
                          on table1.Field<string>("KundeName") equals table2.Field<string>("KundeName")
                          select new
                              {
                                  KundeID = table1.Field<Int32?>("KundeID"),
                                  KundeName = table1.Field<String>("KundeName"),
                                  Produkt = table1.Field<String>("Produkt"),

                                  Comment = table2.Field<String>("Comment")
                              };

            foreach (var item in results)
            {
                Console.WriteLine(String.Format("{0}    {1}    {2}    {3}", item.KundeID, item.KundeName, item.Produkt, item.Comment));
            }

was mache ich hier falsch? wie kann ich die 4. Objekt in Tabelle 1 anzeigen lassen?
 
Zurück
Oben