Autor Beitrag
julia24
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 28.02.15 16:56 
Hallo ich versuche gerade folgenden Code in meine Applikation einzubauen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
MeineDataContextdb = new MeineDataContext;

var pilotgroup = (from l in db.Lg
                  join c in db.Catas on l.NUMBER equals c.Object
                  where c.IdObject == "25" && (l.DATE >= time1 && l.DDATE <= time2)
                  select l)
                  .GroupBy(l => l.NUMBER)
                  .Select(group => new
                  {
                     ...
                     //hier sind noch andere Anweisungen
                     ...

                    TotalDuration = group.Where(lg => q.CreateType17().Contains(lg.CREATE)
                                                && lg.EN_TIME > 0)
                                         .Sum(lg => lg.EN_TIME)
                  }
....

Hierbei schmeist das Programm aber immer einen Fehler. Und sagt ich versuche null in einen
Int16 Wert einzusetzen der null nicht zulässt. Alle meine Spalten in der DB lassen aber Null
zu (ausser PK)

Wenn ich aber folgendes mache:
ausblenden C#-Quelltext
1:
TotalDuration = group.Sum(lg => lg.EN_TIME)					

dann geht es.

Was mache ich Falsch?

Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 28.02.15 17:25 
Hallo,

ich denke mal, daß die Abfrage
ausblenden C#-Quelltext
1:
&& lg.EN_TIME > 0					

zu dem Fehler führt (am besten, du postest den Fehler im Original).
Denn wenn dort null drin steht, dann kann er nicht mit einer Zahl verglichen werden.

Probiere mal
ausblenden C#-Quelltext
1:
&& lg.EN_TIME != null && lg.EN_TIME.Value > 0					
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 28.02.15 17:47 
Ist TotalDuration tatsächlich Teil eines anonymen Typs oder doch Teil eines echten Typs und als int (anstatt nullable int) definiert?

Versuche das Besipeil bitte weiter zu vereinfachen dann ist dir eher zu helfen. Entweder du stolperst beim vereinfachen über die tatsächliche Problemstelle oder wir können eher was damit anfangen. Zum Beispiel kann keiner von uns was mit der CreateType17() Methode anfangen, das Problem könnte ja da drin stecken und betrifft gar nicht das was du gerade zeigst, und genauso wenig können wir erahnen wo da jetzt q plötzlich herkommt.
julia24 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 28.02.15 17:55 
Stimmt da hast du natürlich recht sorry.

Ich denke auch das es an dem Contains liegt. Denn das ist eine int Liste:

ausblenden C#-Quelltext
1:
2:
        private int[] createCause17 = new[] { 014810121719 };
        public int[] CreateCause17() { return createCause17; }


und ich habe gerade versucht es so zu implementieren (und das ging wiederrum):

ausblenden C#-Quelltext
1:
2:
3:
TotalDuration = group.Where(lg => (lg.CAUSE == 0 || lg.CAUSE == 1)
                                                                                           && lg.TIME > 0)
                                                                                            .Sum(lg => lg.TIME)


Hier habe ich jetzt mal 0 und 1 aus der Liste genommen, nur zum Test. Daher sieht man es hier nicht bis 19...

Aber das genau kann ich doch mit Contains machen. Oder wie beschreibe ich sonst das "in"
statt ==?
julia24 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 28.02.15 18:55 
Ich denke ich hab die Lösung:
ausblenden C#-Quelltext
1:
q.CreateType17().Contains((int)lg.CAUSE)					


Hab anscheinend nur das (int) vergessen...

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 28.02.15 19:01 
Wenn Cause NULL sein kann wird der Cast aber immer noch knallen. Ersetz NULL noch durch was unverfängliches zum Beispiel .Contains(lg.CAUSE ?? -1) oder teste im WHERE als weitere Bedingung vorher das CAUSE nicht NULL ist.