执行 LINQ to SQL 投影时是否需要匿名类型?

Are Anonymous Types required when doing LINQ to SQL Projections?

我一直在阅读 Projections,虽然我发现它们很吸引人,但我也发现它们不是很透明并且 Microsoft 的文档似乎不完整。

This article Eugene Prystupa 写的非常好,但我仍有疑问。

例如,shaping/projecting是否需要使用匿名类型?或者也可以使用自定义命名类型吗?

例如,以下两个代码示例会生成相同的 SQL 吗?

var q = ctx.CustomerAddresses.Select(x => 
         new {
             CustomerAddress = ca,
             ca.Customer,
             ca.Address
         }).Take(3);

var w = ctx.CustomerAddresses.Select(x => 
         new CustomerAddressHelper() {
             CustomerAddress1 = ca,
             Customer1 = ca.Customer,
             Address1 = ca.Address
         }).Take(3);

public class CustomerAddressHelper
{
    public CustomerAddress CustomerAddress1;
    public Customer Customer1;
    public Address Address1;
}

我总是更喜欢使用强类型投影模型,而不是动态 - 生成的 SQL 会是相同的。

就SQL而言,它只需要知道return需要哪些列来满足请求。从 SQL 的角度来看,无论是填充动态对象还是自定义类型对象都无关紧要。

检查 SQL 实际执行的内容的 good/quick 方法是 运行 SQL Profiler,然后观察当结果出现时命中数据库的内容Linq-to-sql 查询已实现