2013-08-07 8 views
10

Próbuję utworzyć kwerendę linq join w nopCommerce 3.0. łączę dwie tablice w linq i pomyślnie piszę kod:Wyrażenie lambda z treścią oświadczenia nie może zostać przekonwertowane na drzewo wyrażeń w nopCommerce

. ale Visual Studio intellicence pokazuje błąd jak

wyrażenie lambda z ciałem oświadczenie nie mogą być konwertowane do drzewa wyrażenie

proszę zobaczyć mój poniższy kod

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(); 

ale błąd pokazuje

enter image description here

proszę o pomoc

+4

Twoja lambda jest funkcją. Ta funkcja nie może zostać przekonwertowana na SQL. Musisz znaleźć inny sposób robienia tego, co robisz. –

+0

Dziękuję za twoją godną zaufania odpowiedź. tutaj Nazwa kontaktu i Nazwa firmy są potrzebne w wyniku kwerendy. –

Odpowiedz

2

Komunikat o błędzie to dokładnie co mówi. Masz wyrażenie lambda. Ma treść oświadczenia. Wyrażenie lambda z ciałem instrukcji nie może zostać przekonwertowane na drzewo wyrażeń. Ale Join wymaga drzewa wyrażeń do użycia z EF. Powinieneś spróbować zastąpić to, co masz, wyrażeniem lambda, które nie ma ciała takiego jak:

(cev, c) => new CustomerEventRolesModel { 
       Id = cev.Id, 
       CustomerId = c.Id 
      } 

I tak dalej.

Nawiasem mówiąc,

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

nie będzie działać z EF. Kropka. Lepiej wymyśl coś innego.

+0

Dziękujemy za cenną odpowiedź. Naprawdę przepraszam, proszę pana. Nie jestem osobą doświadczoną. jak mogę dołączyć nazwę kontaktu i nazwę firmy do tego wyniku zapytania. Myślę, że trzeba zmienić całą funkcję dodawania pól ContactName i CompanyName. –

+4

Po wpisaniu ich. Naśladuj to, co zrobiłem dla dwóch pierwszych właściwości. – jason

+3

-1; powtórzenie treści komunikatu o błędzie w protekcjonalnie krótkich zdaniach i dodanie CAŁKOWITEGO CAPS raczej nie pomoże pytającym zrozumieć, dlaczego jego kod jest nielegalny. W szczególności ta odpowiedź nie wyjaśnia, czym jest drzewo wyrażeń, do czego EF używa ich, ani dlaczego kompilator nie jest w stanie wykonać (lub chce zrobić) trywialnego przegrupowania, które powoduje, że błąd kompilacji odchodzi (co jest wypakowanie ciała lambda do metody i użycie wywołania tej metody jako wartości pozbawionego ciała wyrażenia lambda). –

Powiązane problemy