2013-08-07 13 views
10

Ich versuche, eine Linq-Join-Abfrage im nopCommerce 3.0 zu erstellen. Ich schließe zwei Tabelle in linq und schreibeEin Lambda-Ausdruck mit einem Anweisungskörper kann in nopCommerce nicht in einen Ausdrucksbaum konvertiert werden

den Code erfolgreich. aber das Visual Studio intellicence zeigt die Fehler wie

Ein Lambda-Ausdruck mit einer Aussage Körper kann nicht auf einen Ausdruck Baum

bitte meinen Code siehe unten

var roles = _customerEventRoleRepository.Table.Where(c => c.EventId == selevent) 
        .Join 
        (
         _customerRepository.Table, 
         cev => cev.CustomerId, c => c.Id, 
         (cev, c) => 
         {        
          var cust = new CustomerEventRolesModel(); 

          cust.Id = cev.Id; 
          cust.CustomerId = c.Id; 
          cust.Customer = c.Email; 
          cust.ContactName = c.GetAttribute<string>(SystemCustomerAttributeNames.FirstName); 
          cust.CompanyName = c.GetAttribute<string>(SystemCustomerAttributeNames.Company); 
          cust.Speaker = cev.IsSpeaker; 
          cust.Sponsor = cev.IsSponser; 

          return cust; 
         } 
        ).OrderBy(cev => cev.Customer).ToList(); 

umgewandelt werden, aber der Fehler zeigt

enter image description here

bitte hilfe

+4

Ihr Lambda ist eine Funktion. Diese Funktion kann nicht in SQL konvertiert werden. Sie müssen einen anderen Weg finden, um das zu tun, was Sie tun. –

+0

Vielen Dank für Ihre wertvolle Antwort. Hier werden der ContactName und CompanyName im Abfrageergebnis benötigt. –

Antwort

2

Die Fehlermeldung lautet genau was es sagt. Sie haben einen Lambda-Ausdruck. Es hat einen Anweisungskörper. Ein Lambda-Ausdruck mit einem Anweisungskörper kann nicht in einen Ausdrucksbaum konvertiert werden. Aber Join erfordert einen Ausdrucksbaum, um mit EF zu verwenden. Sie sollten versuchen, zu ersetzen, was Sie mit einem Lambda-Ausdruck haben, der keinen Körper wie folgt hat:

Und so weiter.

By the way,

ContactName = c.GetAttribute<string>(SystemCustomerAttributeNames.FirstName) 

wird NICHT mit EF arbeiten. Zeitraum. Du solltest lieber etwas anderes herausfinden.

+0

Vielen Dank für Ihre wertvolle Antwort. Es tut mir wirklich leid, Sir. Ich bin keine erfahrene Person. Wie kann ich ContactName und CompanyName in dieses Abfrageergebnis aufnehmen? Ich denke, müssen ganze Funktion für das Hinzufügen von ContactName und CompanyName Felder ändern. –

+4

Indem Sie sie eingeben. Mimisch, was ich für die ersten beiden Eigenschaften getan habe. – jason

+3

-1; Es ist unwahrscheinlich, dass der Inhalt der Fehlermeldung in hilfreichen kurzen Sätzen und mit zusätzlichen ALL CAPS zu verstehen hilft, dass der Fragesteller versteht, warum sein Code illegal war. Insbesondere erklärt diese Antwort nicht, was ein Ausdrucksbaum ist, wofür EF sie verwendet, oder warum der Compiler nicht in der Lage ist, die triviale Neuanordnung auszuführen oder zu machen, die den Kompilierungsfehler zum Verschwinden bringt (d. H Extrahieren des Lambda-Körpers in eine Methode und Verwenden eines Aufrufs für diese Methode als Wert eines körperlosen Lambda-Ausdrucks. –