6 Stimmen

Wie kann man ein Linq Dynamic Query-Ergebnis als benutzerdefinierte Klasse darstellen?

Normalerweise mache ich das:

var a = from   p in db.Products
        where  p.ProductType == "Tee Shirt"
        group  p by p.ProductColor into g
        select new Category { 
               PropertyType = g.Key,
               Count = g.Count() }

Aber ich habe einen Code wie diesen:

var a = Products
        .Where("ProductType == @0", "Tee Shirt")
        .GroupBy("ProductColor", "it")
        .Select("new ( Key, it.Count() as int )");

Welche Syntax könnte ich ändern, um identische Ergebnisse zu erzielen, d. h. wie kann ich eine Projektion der Kategorie aus der zweiten Linq-Anweisung durchführen?

Ich weiß, dass in beiden g y es gleich sind und den gesamten Tabellensatz darstellen, und dass Ich ziehe den gesamten Datensatz ein, nur um eine Zählung vorzunehmen. Das muss ich auch noch ändern. Bearbeiten: Marcelo Cantos wies darauf hin, dass Linq intelligent genug ist, um keine unnötigen Daten zu ziehen. Danke!

2voto

casperOne Punkte 72238

Warum sollten Sie das überhaupt tun müssen? Da Sie nach dem GroupBy-Aufruf noch über alle Informationen verfügen, können Sie dies problemlos tun:

var a = Products
        .Where("ProductType == @0", "Tee Shirt")
        .GroupBy("ProductColor", "it")
        .Select(c => new Category { 
            PropertyType = g.Key, Count = g.Count() 
        });

Der Produkttyp sollte immer noch durchfließen und zugänglich sein, und die regelmäßigen Gruppierungen/Filterungen sollten den Typ, der durch die Erweiterungsmethoden fließt, nicht verändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X