常规和编译的Linq到SQL之间的等价?
我正在努力将一些现有的Linq转换为SQL 编译查询,部分使用这篇有用的文章作为指南。
以下是我原始陈述之一的示例:
private IQueryable GetWidgetQuery() { return db.Widgets.Where(u => (!u.SomeField.HasValue || !u.SomeField.Value)); }
这是我尝试创建编译的查询:
private static readonly Func<DBDataContext, IQueryable> GetWidgetQuery = CompiledQuery.Compile((DBDataContext db) => db.Widgets.Where(u => (!u.SomeField.HasValue || !u.SomeField.Value)));
我在查看此查询的标准和编译化身之间的差异时遇到了一些麻烦。 假设我的语法正确,编译后的查询是否会返回与标准查询相同的数据,只是使用编译查询提供的优势?
是的,它将返回相同的数据 – IQueryable
调用GetWidgetQuery()时,需要传递DBDataContext对象。
DBDataContext db;
返回IQueryable
var widgets = GetWidgetQuery(db);
使用LINQ to SQL,通过对结果执行LINQ查询,这会失去编译查询的好处:
var widgetsUncompiled = GetWidgetQuery(db).Where(u => u.SomeField.HasValue);
LINQ-to-SQL中的编译和非编译查询之间存在差异。 编译后的查询会立即执行,即使它们只是在撤回IQueryable。 查看我的相关问题,可能与LINQ to SQL *编译*查询以及执行时有关