2010-03-30 5 views
1

Dans Linq Dynamic Query, Scott Guthrie montre un exemple requête Linq:simple requête dynamique LINQ question

var query = 
    db.Customers. 
    Where("City == @0 and Orders.Count >= @1", "London", 10). 
    OrderBy("CompanyName"). 
    Select("new(CompanyName as Name, Phone)"); 

Notez la projection new(CompanyName as Name, Phone). Si j'ai une classe comme ceci:

public class CompanyContact { 
    public string Name {get;set;} 
    public string Phone {get;set;} 
} 

Comment pourrais-je essentiellement « jeter » son résultat en utilisant le type de données CompanyContact sans faire un foreach sur chaque enregistrement et le dumping pour une structure de données différentes? A ma connaissance le seul .Select disponible est la version de Dymanic Query qui ne prend qu'une chaîne de caractères et une liste de paramètres.

Répondre

4

Autant que je puisse voir de l'article que vous citez, Les méthodes de requête dynamiques renvoient des objets IQueryable <>, ce qui signifie que le standard Select() devrait être disponible.

var query = 
    db.Customers. 
    Where("City == @0 and Orders.Count >= @1", "London", 10). 
    OrderBy("CompanyName"). 
    Select(c => new CompanyContact {Name = c.CompanyName, c.Phone}); 

Vous devrez peut-être donner explicitement le type de Select

Select<Customer>(c => new CompanyContact {Name = c.CompanyName, c.Phone}); 
+0

je dois envelopper toute requête moins la sélection dans un casting juste pour obtenir le lambda activé Sélectionner la méthode. –

+0

La seule chose que la distribution devrait faire est d'activer l'IntelliSense. Si l'objet n'est pas ce type avant la main, le moulage ne sera pas capable de le chaéger. –