常规和编译的 Linq to SQL 之间是否等效?
我正在努力将一些现有的 Linq to SQL 转换为编译查询,部分使用这个 作为指南的有用文章。
下面是我的原始语句之一的示例:
private IQueryable<Widget> GetWidgetQuery()
{
return db.Widgets.Where(u => (!u.SomeField.HasValue || !u.SomeField.Value));
}
这是我创建编译查询的尝试:
private static readonly Func<DBDataContext, IQueryable<Widget>> GetWidgetQuery =
CompiledQuery.Compile((DBDataContext db) =>
db.Widgets.Where(u => (!u.SomeField.HasValue || !u.SomeField.Value)));
我在可视化此查询的标准版本和编译版本之间的差异时遇到了一些麻烦。假设我的语法正确,编译的查询是否会返回与标准查询相同的数据,并且具有使用编译查询提供的优势?
I'm working on transforming some existing Linq to SQL into Compiled queries, in part using this helpful article as a guide.
Below is an example of one of my original statements:
private IQueryable<Widget> GetWidgetQuery()
{
return db.Widgets.Where(u => (!u.SomeField.HasValue || !u.SomeField.Value));
}
Here's my attempt at creating a compiled query:
private static readonly Func<DBDataContext, IQueryable<Widget>> GetWidgetQuery =
CompiledQuery.Compile((DBDataContext db) =>
db.Widgets.Where(u => (!u.SomeField.HasValue || !u.SomeField.Value)));
I'm having some trouble visualizing the differences between the standard and compiled incarnations of this query. Assuming my syntax is proper, will the compiled query return the same data as the standard one, just with the advantages using Compiled queries provides?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,它将返回相同的数据 - IQueryableobject - 但与第一个示例不同,如果进一步扩展查询,您将失去编译查询的好处。
调用 GetWidgetQuery() 时需要传递 DBDataContext 对象。
返回 IQueryable:
使用 LINQ to SQL,这会通过对结果执行 LINQ 查询而失去编译查询的优势:
Yes it will return the same data - the IQueryable<Widget> object - but unlike the first example, you'll lose the benefits of the compiled query if you extend the query further.
You will need to pass the DBDataContext object when you call GetWidgetQuery().
Returns IQueryable<Widget>:
With LINQ to SQL, this loses the benefit of the compiled query by performing a LINQ query on the results:
LINQ-to-SQL 中的编译查询和非编译查询之间存在差异。已编译的查询会立即执行,即使它们只是返回 IQueryable。查看我对此的问题,可能与 LINQ to SQL * 相关编译*查询以及它们何时执行
There is a difference between compiled and non-compiled queries in LINQ-to-SQL. Compiled queries execute immediately even if they are just returing IQueryable. Check out my question regarding this, might be related LINQ to SQL *compiled* queries and when they execute