Linq to sql 如何将NOEXPAND提示与linqtosql一起使用?

Linq to sql 如何将NOEXPAND提示与linqtosql一起使用?,linq-to-sql,indexed-view,query-hints,Linq To Sql,Indexed View,Query Hints,我有一个索引视图,我需要为它指定noexpand提示,以便它能够合理地执行。不幸的是,正如从NOLOCK提示中修改Linq-to-SQL生成的T-SQL查询所看到的那样,似乎没有简单的方法可以直接利用这些提示,或者说是吗 我的想法是,允许通过使用属性或通过dbml声明性地定制这些东西是有意义的。此外,由于Linq to SQL似乎只针对SQL Server工作,因此我们也能够利用这些高级功能(如果存在的话)才有意义。尽管我对解决这个问题的任何创造性方法都感兴趣,但不管实现如何。我发现了一种解决方

我有一个索引视图,我需要为它指定noexpand提示,以便它能够合理地执行。不幸的是,正如从NOLOCK提示中修改Linq-to-SQL生成的T-SQL查询所看到的那样,似乎没有简单的方法可以直接利用这些提示,或者说是吗


我的想法是,允许通过使用属性或通过dbml声明性地定制这些东西是有意义的。此外,由于Linq to SQL似乎只针对SQL Server工作,因此我们也能够利用这些高级功能(如果存在的话)才有意义。尽管我对解决这个问题的任何创造性方法都感兴趣,但不管实现如何。

我发现了一种解决方法,它似乎可行,但需要为每个想要使用NOEXPAND提示的SQL视图创建第二个视图。在第二个视图中,只需从原始视图中选择所有字段,并添加NOEXPAND提示。任何需要使用NOEXPAND提示的Linq-to-SQL查询现在都可以只针对包装原始视图的视图

有关更多详细信息,请参阅

在创建依赖视图时要考虑的另一个缺点是,您必须确保以适当的依赖顺序< /P>应用创建脚本。


有谁有更好的选择吗?我宁愿不创建额外的SQL视图来支持使用这个必要的优化器提示。

我完全同意,但我不相信有这样的方法。在EF4中,您可以使用
ExecuteStoreCommand
,它将允许您直接执行SQL。如果性能不可接受,这可能是您唯一的选择

==编辑==

您还可以通过
ExecuteQuery
方法在LINQ to SQL中执行此操作


现在实体框架越来越有能力了,我可以再看一遍,考虑从LINQ转换到SQL,但是现在,除非我能找到足够的令人信服的理由和时间来研究这种转换,那么我更感兴趣的是LINQtoSQL的解决方案。我将把EF4的ExecuteStoreCommand特性作为一个有趣的优势来关注一下。是的,哦。我已经互换地读了好几天了!:)我用LINQ更新了我的答案到SQL。打破架构模式并执行SQL字符串之类的操作从来都不是一件有趣的事情,但考虑到您已经绑定到SQL Server,反对的只是纯粹性,而不是实用性。在我的特殊情况下,我处理的是纯延迟的、高度动态的查询,因此我认为它排除了直接执行技术,如ExecuteQuery。