执行 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 查询已实现
我一直在阅读 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 查询已实现