Laden...

To.List() Objekt als Parameter übergeben

Erstellt von Julia23 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.992 Views
J
Julia23 Themenstarter:in
36 Beiträge seit 2015
vor 9 Jahren
To.List() Objekt als Parameter übergeben

verwendetes Datenbanksystem: <Ms Microsoft SQL>

Ich versuche gerade aus einer Datenbank eine Liste zu holen.
Siehe to.List()
und das dann als Parameter zu übergeben, damit ich es als schleife zählen kann.

Leider gibt der Compiler hier einen Fehler aus, da er den Typ nicht lesen kann.
Wie ihr am Code sehen könnnt:

public void InsertPilot()
    {

        var pilotgroup = (from l in db.lg7
                          join c in db.catalog on l.NUMBER.ToString() equals c.ObjId
                          where c.IdObj == "10"
                          && (l.ENDDATE > time1 && l.ENDDATE <= time2)
                          orderby l.EN_ENDDATE
                          select l)
                          .GroupBy(l => l.NUMBER)
                          .Select(group => new
                          {
                              pilotId = group.Key,
                              NUMBER = group.FirstOrDefault().NUMBER,
                              Date = currentDate.ToString("yydMM", System.Globalization.CultureInfo.CreateSpecificCulture("en-US")),
                              // ...
                              EndDateCallsReceived = group.Where(lg => STATE == 0
                                  //…
                                  ).Select(lg => lg.ENDDATE).ToList()

                          })

                                            ;


        foreach (var p in pilotgroup)
        {

            Pilot pilot = new Pilot
            {

                pilot_number = p.EN_PILOTNUMBER.ToString(),
                date = p.Date,
                calls_received = p.CallsReceived,

                //First Error because it don´t except the List 
                maximum_number_of_simultaneous_calls = rc.MaximumNumberOfSimultaneousCalls(p.CallsReceived, p.EndDateCallsReceived, p.StartDateCalls),
                //…
            };
        }


    }
}




public int MaximumNumberOfSimultaneousCalls(int callsRecieved, List<int> endDate, List<int> startDate)
    {           

        if(callsRecieved == 0)
        { return 0;}

        else if (callsRecieved == 1)
        { return 1; }

        else
        {
            var maxCallsCount = 0;

            foreach (var second in Enumerable.Range(startDate.FirstOrDefault(),
                                            endDate.FindLast() - startDate.FirstOrDefault() + 1))
            {
                var callsCount = 0;

                for (var i = 0; i < startDate.Length; ++i)
                {
                    if ( startDate[i]<= second && second <= endDate[i])
                    {
                        ++callsCount;
                    }
                }

                if (callsCount > maxCallsCount)
                {
                    maxCallsCount = callsCount;
                }
            }

                    return maxCallsCount;


        }
            return 0;

    }    
1.696 Beiträge seit 2006
vor 9 Jahren

Leider gibt der Compiler hier einen Fehler aus, da er den Typ nicht lesen kann.

Und wie lautet die Fehlermeldung? Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 5 und [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

J
Julia23 Themenstarter:in
36 Beiträge seit 2015
vor 9 Jahren

Fehlermeldung:
2-Argument: Kann nicht von "System.Collections.Generic.List<int?>" in "System.Collections.Generic.List<int>" konvertiert werden. c:\users\user\documents\visual studio 2013\projects\creportgenerator\creportgenerator\piloteinfuegen.cs

R
228 Beiträge seit 2013
vor 9 Jahren

Int ist eigentlich ein Wertetyp und kann nicht null sein. int? ist aber nullable und nützlich für Datenbanken --> Datenbankfeld nicht gefüllt. int? kann also null sein.

Vermutung wäre jetzt aus deiner List<int> eine List<int?> zu machen, wobei ich nicht sicher bin was EndDateCallsReceived eigentlich für ein Typ ist

J
Julia23 Themenstarter:in
36 Beiträge seit 2015
vor 9 Jahren

Ah das würde ja Sinn machen, denn meine Typ ist List<int?>.
Kann ich das auch so machen, dass ich den fest auf List<int> setzen?

Danke schonmal für eure Antworten ich habe das nun mit List<int?> versucht.
Dabei erscheint aber folgendes Problem:

Erstmal der Code:

 foreach (var second in Enumerable.Range((int)beginningDate.FirstOrDefault(),
                                                (int)endDate.Last() - (int)beginningDate.FirstOrDefault()))
                {
                    var callsCount = 0;

                    for (var i = 0; i < beginningDate.Last(); ++i)
                    {
                       //hier wird der Fehler angezeigt. 
                        if (beginningDate[i] <= second && second <= endDate[i])
                        {
                            ++callsCount;
                        }
                    }

                    if (callsCount > maxCallsCount)
                    {
                        maxCallsCount = callsCount;
                    }
                }

Fehlermeldung: > Fehlermeldung:

Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Auflistung sein.

Hier liegt das Problem daran, dass genau dadurch, dass hier ein List<int?>
verwendet wird, auch null vorkommen darf. Das liegt aber ausserhalb des indexes.
Ich weiß aber nicht wie ich das vermeiden kann.

Natürlich kann ich eine try-catch exception drum machen.
Aber das macht die Abfrage so unglaublich langsam. Ich hab nun statt 2 min Abfrage.
15 min... Das ist kein optimaler Weg.

1.696 Beiträge seit 2006
vor 9 Jahren

Hier liegt das Problem daran, dass genau dadurch, dass hier ein List<int?>
verwendet wird, auch null vorkommen darf. Das liegt aber ausserhalb des indexes.
Ich weiß aber nicht wie ich das vermeiden kann.

Da du mit NULL-Werte nichts anfangen kannst, muss du die DB-Abfrage soweit ändern, dass diese im Ergebnis nicht vorkommen.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::