2013-02-22 10 views
9

Chcę wybrać 2 elementy z mojej tabeli bazy danych za pomocą zapytania LINQ i widziałem przykład, który używa UNION Nie mam dużego doświadczenia, ale myślę, że może to jest to, czego potrzebuję, ale ja dostaję błąd, którego nie mogę naprawić i nie jestem pewien, czy i tak można go naprawić. Więc tutaj jest mój kwerendy:Kwerenda Linq UNION do wybrania dwóch elementów

IList<String> materialTypes = ((from tom in context.MaterialTypes 
            where tom.IsActive == true 
            select tom.Name) 
            .Union(from tom in context.MaterialTypes 
            where tom.IsActive == true 
            select (tom.ID))).ToList(); 

które, jak się wydaje narzekają próbuje użyć UNION na IQueryable z IEnumarebale. Próbowałem to naprawić dodając ToString() takiego - (tom.ID).ToString która doprowadziła do czyszczenia podkreślenie błędzie w Visual-Studio-2010 ale w czasie wykonywania otrzymuję:

{"LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression."} 

Ty, Leron.

+4

Dlaczego nie wybierasz po prostu 'new {tom.Name, tom.ID}' zamiast używać 'Union'? –

+0

Chcę użyć danych jako moje 'DataSource' jeśli spróbuję z tym daje błąd, który nie może konwertować z typu anonimowego na ciąg.Jeśli dodam' ToString() 'tuż przed' .ToList() 'Dostaję inną konwersję błąd - tym razem z 'char' do' String' i 'Union' jest rozwiązaniem, które widziałem w tego rodzaju sytuacjach. Czy istnieje inny sposób? – Leron

Odpowiedz

25

EDIT:

Ok znalazłem dlaczego int.ToString() w LINQtoEF zawiedzie, przeczytaj ten wpis: Problem with converting int to string in Linq to entities

Działa to na mojej stronie:

 List<string> materialTypes = (from u in result.Users 
             select u.LastName) 
         .Union(from u in result.Users 
           select SqlFunctions.StringConvert((double) u.UserId)).ToList(); 

Na twoje Powinno być tak:

IList<String> materialTypes = ((from tom in context.MaterialTypes 
             where tom.IsActive == true 
             select tom.Name) 
             .Union(from tom in context.MaterialTypes 
             where tom.IsActive == true 
             select SqlFunctions.StringConvert((double)tom.ID))).ToList(); 

Dzięki , nauczyłem się czegoś dzisiaj :)

+0

Ponownie - 'LINQ to Entities nie rozpoznaje metody 'System.String ToString()' metoda, a ta metoda nie może być przetłumaczona na wyrażenie sklepu." Błędem z mojego oryginalnego postu był wewnętrzny wyjątek. Oto, co otrzymuję, kiedy próbuję. Myślę, że to samo, co w nawiasach. – Leron

+0

Lol, pójdę na lunch i przetestuję go. Jeśli to zadziała, zaakceptuje twoją odpowiedź – Leron

+0

Zmieniono mój post, więc myślę, że jest jaśniejszy :) – Tom

Powiązane problemy