常规和编译的 Linq to SQL 之间是否等效?

发布于 2024-12-01 05:08:19 字数 804 浏览 0 评论 0原文

我正在努力将一些现有的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

始终不够 2024-12-08 05:08:19

是的,它将返回相同的数据 - IQueryableobject - 但与第一个示例不同,如果进一步扩展查询,您将失去编译查询的好处。

调用 GetWidgetQuery() 时需要传递 DBDataContext 对象。

DBDataContext db;

返回 IQueryable

var widgets = GetWidgetQuery(db);

使用 LINQ to SQL,这会通过对结果执行 LINQ 查询而失去编译查询的优势:

var widgetsUncompiled = GetWidgetQuery(db).Where(u => u.SomeField.HasValue); 

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().

DBDataContext db;

Returns IQueryable<Widget>:

var widgets = GetWidgetQuery(db);

With LINQ to SQL, this loses the benefit of the compiled query by performing a LINQ query on the results:

var widgetsUncompiled = GetWidgetQuery(db).Where(u => u.SomeField.HasValue); 
染墨丶若流云 2024-12-08 05:08:19

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文