2013-02-22 15 views
9

Ich möchte 2 Elemente aus meiner Datenbanktabelle mit LINQ Abfrage auswählen und ich sah ein Beispiel, die UNION verwenden Ich habe nicht viel Erfahrung, aber ich denke, dass das ist, was ich brauche, aber ich bekomme einen Fehler, den ich nicht beheben kann und ich bin mir nicht sicher, ob es sowieso repariert werden kann. So, hier ist meine Frage:Linq UNION Abfrage, um zwei Elemente auszuwählen

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

Welche, wie es scheint beschwert sich über versucht UNION auf IQueryable mit IEnumarebale zu verwenden. Ich habe versucht, das zu beheben, indem ToString() wie diese Zugabe - (tom.ID).ToString, die in Visual-Studio-2010 zur Reinigung der Fehler unterstreichen führten aber in der Laufzeit erhalte ich:

{"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

Warum wählst du nicht einfach 'new {tom.Name, tom.ID}' anstelle von 'Union'? –

+0

Ich möchte die Daten als meine 'DataSource' verwenden, wenn ich versuche, gibt es einen Fehler, der nicht vom anonymen Typ in String konvertieren kann.Wenn ich' ToString() 'direkt vor' .ToList() 'Ich bekomme eine andere Konvertierung Fehler - diesmal von "char" zu "String" und die "Union" ist eine Lösung, die ich für diese Art von Situationen gesehen habe. Gibt es eine andere Art und Weise? – Leron

Antwort

25

EDIT:

Ok fand ich, warum die int.ToString() in LINQtoEF fehlschlägt, lesen Sie bitte diesen Beitrag: Problem with converting int to string in Linq to entities

Dies ist auf meiner Seite funktioniert:

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

auf Ihr es sollte so sein:

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

Danke Ich habe heute etwas gelernt :)

+0

Nochmals - 'LINQ to Entities erkennt die Methode 'System.String ToString()' nicht und diese Methode kann nicht in einen Ausdruck übersetzt werden. Der Fehler von meinem ursprünglichen Beitrag war eine innere Ausnahme. Das ist, was ich bekomme, wenn ich es versuche. Ich denke genauso wie bei Klammern. – Leron

+0

Lol, ich gehe zum Mittagessen und teste es danach. Wenn es funktioniert, werde ich deine Antwort annehmen. – Leron

+0

Habe meinen Beitrag geändert, also denke ich, dass es klarer ist :) – Tom