0

我正在使用 Linq2Sql(我的客户卡在 3.5 上,所以我无法迁移到实体框架)来访问 SQL Server 数据库。

为了在某​​些情况下提高性能,我将 LoadOptions 附加到我的上下文中。当我使用编译查询时,我不能禁用它,当它们无用并且它们减慢请求时也不能。

但有时我想检索数据,就像没有附加到我的上下文的 LoadOptions 一样。

作为一种解决方法,我尝试返回的不是完整记录,而是它的投影。

例子 :

DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Product>(c => c.X);
dlo.LoadWith<Product>(c => c.Y);
context.LoadOptions = dlo;

return (from product in context.Products
        where ...
        select product).First();

这将执行如下查询:

Select product.*, X.*, Y.* from Product Left outer join X left outer join Y where....

在这种情况下,一切都很正常。

我的方法依赖于这样的东西:

return (from product in context.Products
        where ...
        select new MyType() { p = product.Field }).First();

执行类似的查询

Select product.Field from Product ->Left outer join X left outer join
Y<-- where....

请注意请求中的 LEFT OUTER JOIN。

虽然我期待类似的东西:

Select product.Field from Product where....

所以我想知道是否有办法避免这些连接?

非常感谢您的建议,

4

1 回答 1

1

这篇博客文章介绍了如何临时从 DataContext 实例中删除 DataLoadOptions。

您只需要更改 DataContext 上的私有 loadOptions 字段的值即可更改加载选项


如果您知道要发送的 sql,则可以跳过翻译步骤,直接使用DataContext.ExecuteQuery<Product>

于 2012-06-26T14:28:14.983 回答