2010-03-30 75 views
1

在LINQ Dynamic Query,斯科特Guthrie的示出了示例Linq查询:简单LINQ的动态查询问题

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

通知投影new(CompanyName as Name, Phone)。如果我有这样一个类:

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

我怎么会基本上是“投”使用CompanyContact数据类型而无需在每个记录做一个foreach和为之倾倒到不同的数据结构,他的结果呢?据我所知,唯一可用的.​​Select是Dymanic Query版本,它只接受一个字符串和参数列表。

回答

4

就我所见,从您引用的文章中可以看出,动态查询方法返回IQueryable对象,这意味着正常的Select()应该可用。

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

您可能必须明确给出类型的选择

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

我可能要在包装铸造整个查询减去选择只是为了让拉姆达启用选择方法。 – 2010-03-30 05:21:30

+0

演员应该做的唯一事情就是启用智能感知。如果对象不是那种类型的话,施法将无法使用它。 – 2010-03-30 11:34:04