2017-04-13 2 views
0

Kann eine Funktion innerhalb einer Lambda-Select-Anweisung hinzugefügt werden? Das ist völlig falsche Syntax, aber es dient nur zu Demonstrationszwecken.C# EF Lambda mit Funktion auswählen

var test = _context.SomeDatabaseTable 
      .Select(c => new SomeViewModel 
      { 
       AssignedUsers = { 
        foreach (var item in c.AssignedToUserIDs.Split(';').ToList()) { 

         //SOME CODE 

        } 
       } 
      }); 

Wer weiß, ob seine mögliche i danach die Ergebnisse in einer Schleife haben?

+0

Warum kann man nicht einfach draußen tun? – Sajeetharan

+1

Soweit ich weiß, ist dies bei EF nicht möglich, da der Code nicht in gültiges SQL konvertiert werden kann. – HimBromBeere

+0

Sie können die Antwort anschließend mit einem Ergebnis wiederholen.Foreach (r => doSomething); –

Antwort

2

Der Grund, warum Sie das nicht tun können, ist, weil die Abfrage Select() Ihre Abfrage nicht tatsächlich gegen die Datenbank ausführt, also versucht EntityFramework, diesen C# -Code in SQL zu konvertieren, was er offensichtlich nicht kann.

Sie können die Abfrage ausführen, indem Sie ToList() aufrufen, bevor Sie Select() aufrufen.

var test = _context.SomeDatabaseTable 
        .ToList() 
        .Select(c => new SomeViewModel 
        { 
         AssignedUsers = c.AssignedToUserIDs.Split(';') 
        }); 

Diese seine eigenen Probleme hat aber, wenn Sie Ihre Abfrage nicht richtig gefiltert, bevor ToList() ausgeführt wird, werden Sie beginnen, über Performance-Probleme kommen, die wächst schlimmer als die Größe Ihres db bekommt.

Was Sie mit dieser foreach Schleife versuchen, ist auch ungültig. Es sollte nicht sogar kompilieren, also entfernen Sie das und verwenden Sie, was ich oben gezeigt habe, nahm ich an, dass die AssignedUsers-Eigenschaft vom Typ 'List' war, wenn Sie die einzelnen Elemente, die geteilt wurden, ändern können, können Sie eine andere Select() Methode an die Ende Split()