Autor Beitrag
flyhigh83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Fr 04.02.11 15:55 
Hallo,

ich hatte vor 2 Tagen schon mal ein Problem mit DBNull Werten gestellt. Da ich mich gerade versuche durch das große Netz von Linq to SQL durchzuwurschtel, treffe ich immer wieder auf Probleme. Damit mein Programm keine Fehler ausspuckt muss ich abfragen ob die Spalte auch kein DBNull Wert hat, da dieser in der Spalte vorkommen kann.

Ich habe hier eine funktionierende Abfrage.

ausblenden C#-Quelltext
1:
2:
3:
4:
var Test1 = from table1 in dbDataSet.table1
join table2 in dbDataSet.table2 on table1.idTable2 equals table2.id
where table1.idTable2 == 1
select table1.Ortsteil = table1 == null ? null : (table1.IsOrtsteilNull() ? null : table1.Ortsteil);


Dann habe versuche ich gerade eine GROUB Klause mit einzubauen. Jetzt kommt das Problem, wie ich jetzt genau die DBNull werte abfangen kann, da ich noch eine zweite Spalte auswählen will. Die Groupanweisung funktioniert. Doch habe ich versucht jetzt die DBNull anweisung an verschiedenen stellen zu implementieren. Allerdings bekomme ich das überhaupt nicht hin. Und habe auch bisher nichts darüber gefunden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
var Test1 = from table1 in dbDataSet.table1
join table2 in dbDataSet.table2 on table1.idTable2 equals table2.id
where table1.idTable2 == 1
group table1 by new { table1.Ort, table1.Ortsteil } into TestOrt
                     select TestOrt.Key.ToString();


Wo kann ich dazu etwas nachlesen, beziehungsweise wer kann mir hier hilfestellung geben?
Dank
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 04.02.11 16:56 
Hallo,

wenn Du die Methoden zur Prüfung auf DBNull verwendest könnte das Ganze dann so aussehen (wenn ich die Methoden richtig benamst habe):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
var Test1 = from table1 in dbDataSet.table1
            join table2 in dbDataSet.table2 on table1.idTable2 equals table2.id
            where table1.idTable2 == 1
            group table1 by new { Ort = table1.IsOrtNull() ? "ist null" : table1.Ort, Ortsteil = table1.IsOrtsteilNull() ? "ist null" : table1.Ortsteil } into TestOrt
      select TestOrt.Key.ToString();

101 LinQ-Beispiele kannst Du Dir unter msdn.microsoft.com/en-us/vcsharp/aa336746 anschauen.
LG, Marko

Für diesen Beitrag haben gedankt: flyhigh83
flyhigh83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Fr 04.02.11 17:18 
Danke

das gleiche habe ich auch so hibekommen. Versuche jetzt nur auf die einzelnen Datensätze noch zuzugreifen von der Abfrage, da ich jeweils einen String brauche

sollte dann so ungefähr aussehen "Ort - Ortsteil"
in der Foreach schleife schau ich dann ob es einen Ortsteil dazu gibt zu dem Ort sonst schreibe ich nur "Ort"

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var test = from table in dbDataSet.table1
                     join table2 in dbDataSet.table2 on table1.idTable2  equals table2.id
                     where table1.idTable2  == 1
                     group table1 by new
                     {
                       Ort = (string)table1.Ort,
                       Ortsteil = table1 == null ? null : (table1.IsOrtsteilNull() ? null : table1.Ortsteil)
                     }
                       into TestOrt
                       select TestOrt.Key.ToString();


Danke mal für deine Mühe. Vielleicht bekomme ich das ja noch in den nächsten Minuten hin. :-)

Ach ja die Seite kenne ich, habe mir davon auch einiges zusammengebaut um es besser zu verstehen. Solangsam wird es. Übung macht den Meister :-)


Hihi,

Nachtrag!

ausblenden C#-Quelltext
1:
2:
3:
4:
                       select new {
                         Ort = TestOrt.Key.Ort.ToString(),
                         Ortsteil = TestOrt.Key.Ortsteil.ToString()
                       };
flyhigh83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Fr 04.02.11 17:27 
Ok ich glaube ich habe es soweit, jetzt nur mal noch eine Frage.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var test = from table in dbDataSet.table1
                     join table2 in dbDataSet.table2 on table1.idTable2  equals table2.id
                     where table1.idTable2  == 1
                     group table1 by new
                     {
                       Ort = (string)table1.Ort,
                       Ortsteil = table1 == null ? null : (table1.IsOrtsteilNull() ? null : table1.Ortsteil)
                     }
                       into TestOrt
                                              select new {
                         Ort = TestOrt.Key.Ort.ToString(),
                         Ortsteil = TestOrt.Key.Ortsteil.ToString()
                       };

string Orteauflisten = "";
foreach (var Ort in ContainerOrteVereine)
{
  Orteauflisten += Ort.Ort + "-" + Ort.Ortsteil + ", ";
}


nachdem er das erste Element schreiben will und sich das zweite holt erhalte ich einen Fehler auf Objektinstanz fehlt. Muss ich mir erst eine Klasse anlegen und die dann als "select new Klasse {...}" angeben? oder warum kommt das.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 04.02.11 17:49 
Ich denke, es liegt daran:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
...
select new 
{
  Ort = TestOrt.Key.Ort.ToString(),
  Ortsteil = TestOrt.Key.Ortsteil.ToString()
};
...
Denn wenn der Ortsteil in der Row DBNull ist, so ist er an diesem Punkt null. Und wenn Du dann Ortsteil = TestOrt.Key.Ortsteil.ToString() sagst, knallt es halt. Aber verstehe auch nicht so ganz, warum Du das select new nochmal machst. Das ToString kannst Du doch auch schon davor machen.

Für diesen Beitrag haben gedankt: flyhigh83
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 05.02.11 00:29 
Nebenbei:
user profile iconflyhigh83 hat folgendes geschrieben Zum zitierten Posting springen:
Da ich mich gerade versuche durch das große Netz von Linq to SQL durchzuwurschtel
Danach sieht es aber nicht aus, denn Linq to SQL kennt kein DBNull ;) . Mit Linq to Objects auf DataSets holst du dir diese Plage aber natürlich wieder zurück.

_________________
>λ=

Für diesen Beitrag haben gedankt: flyhigh83
flyhigh83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Win 7
C# (VS2010)
BeitragVerfasst: Mo 07.02.11 10:15 
Danke,

das ToString() schon vorher zu benutzten hat geholfen.

@Kha: ich werde mir das speziell nochmal suchen. Nur weis ich bisher nicht wie ich sonst wieder auf die Objekte zugreifen kann. Bei den meisten Microsoft Beispielen wird dies auch so gemacht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 07.02.11 15:58 
user profile iconflyhigh83 hat folgendes geschrieben Zum zitierten Posting springen:
Bei den meisten Microsoft Beispielen wird dies auch so gemacht.
Aber sicher nicht bei welchen zu Linq to SQL. Da geht alles über DataContext, DataSets haben dort nichts verloren.

_________________
>λ=