2012-04-03 8 views
0

Ich habe ein Array mit langen Typ Werte gefüllt und für jeden Wert im Array muss ich eine Abfrage implementieren. Ich habe foreach Schleife verwendet, wie Sie aus dem folgenden Code sehen können:Wie kann ich eine Liste definieren, um Ergebnisse einer Abfrage in einer Schleife hinzuzufügen?

Ich habe jedoch ein Problem in meinem Code; Ich muss eine Hauptliste vor der foreach-Schleife definieren, damit ich der jeweiligen Hauptliste Ergebnisse jeder Abfrage hinzufügen kann. meine Frage ist: Wie kann ich diese Liste definieren, wie Sie am Anfang meines Codes sehen können? Danke für die Hilfe ...

Antwort

1

Wie kann ich diese Liste definieren, wie Sie am Anfang meines Codes sehen können?

Machen

new { 
    o.OP_ID, 
    o.OP_UPD_DATE, 
    x.EXTERNAL_ID, 
    o.OP_OS_CODE, 
    o.OP_START, 
    o.OP_ST_STATION, 
    s.START_PRD_ID 
} 

in eine konkrete Art (etwa QueryResult, wenn auch ein etwas wenig präziser als das), und dann

var result = new List<QueryResult>(); 

Außerdem sollten Sie prüfen, erklären nur

drehen
foreach(long id in PrdIdArr) 

und

where s.START_PRD_ID == id 

in

where PrdIdArr.Contains(s.Start_PRD_ID) 
0
var result = new List<object>(); 

    foreach(long id in PrdIdArr) 
    { 
     .... 

     result.Add(mainQuery.ToList()); 
    } 
+0

Stellen Sie sicher, dass Sie die DB nicht direkt in Ihrer Aktionsmethode abfragen. Erstellen Sie eine Repository-Klasse dafür. Es wird Ihnen helfen, Ihr Projekt sauber zu halten und sich darauf zu konzentrieren, was wirklich in Ihren Controllern getan werden muss. – Max

+0

Wenn ich () verwende, gibt es den Fehler an der Zeile "result.Add (mainQuery.ToList());" : "Systems.Collections.Generic: Liste " enthält keine Definition für 'add' und keine Erweiterungsmethode 'add' akzeptiert ein erstes Argument vom Typ 'Systems.Collections.Generic: Liste ' könnte gefunden werden ... . " –

+0

" add "muss" Add "sein! C# unterscheidet zwischen Groß- und Kleinschreibung. – Max

0

Erstellen Sie einfach den anonymen Typ außerhalb mit den gleichen Eigenschaftsnamen und den richtigen Typ

var result = Enumerable.Range(0, 0).Select(x => new 
      { 
       OP_ID = 1, 
       OP_UPD_DATE = DateTime.Now, 
       EXTERNAL_ID = 1, 
       OP_OS_CODE = 1, 
       OP_START = DateTIme.Now, 
       OP_ST_STATION = "", 
       START_PRD_ID = 1, 
      }).ToList(); 

Und in der Schleife Anruf AddRange

result.AddRange(mainQuery.ToList()); 
0

Sie können dies tun:

var result = PrdIdArr.Select(id => 
    from o in db.OPERATIONs 
     join u in db.UNITs on o.OP_UNIT_ID equals u.UNIT_ID into smt 
     from s in smt 
     join x in db.XIDs on s.UNIT_ID equals x.UNIT_ID 
     where o.OP_OT_CODE == OtCode 
     where x.IDTYP_CD == "BSN" 
     where s.START_PRD_ID == id 
     where o.OP_UPD_DATE >= _StartDate 
     where o.OP_UPD_DATE <= _EndDate 
     select new 
     { 
      o.OP_ID, 
      o.OP_UPD_DATE, 
      x.EXTERNAL_ID, 
      o.OP_OS_CODE, 
      o.OP_START, 
      o.OP_ST_STATION, 
      s.START_PRD_ID 
     } 
     .Take(_RowNumber) 
     .ToList() 
    ).ToList(); 

Ich empfehle die Durchführung einige Extract Method Refactorings hoch, da der Code ziemlich komplex und schwierig ist, auf diese Weise zu verstehen/Räude.

Verwandte Themen