Эквивалентность между обычным и компилированным Linq to SQL? - PullRequest
0 голосов
/ 24 августа 2011

Я работаю над преобразованием некоторых существующих Linq в 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)));

У меня возникают некоторые проблемы с визуализацией различий между стандартным и скомпилированным воплощениямиэтот запрос.Предполагая, что мой синтаксис правильный, будут ли скомпилированный запрос возвращать те же данные, что и стандартный, только с преимуществами, предоставляемыми скомпилированными запросами?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Существует разница между скомпилированными и некомпилированными запросами в LINQ-to-SQL.Скомпилированные запросы выполняются немедленно, даже если они просто возвращают IQueryable.Проверьте мой вопрос относительно этого, могут быть связаны LINQ to SQL * скомпилированные * запросы и когда они выполняют

1 голос
/ 24 августа 2011

Да, он вернет те же данные - объект IQueryable , - но в отличие от первого примера, вы потеряете преимущества скомпилированного запроса, если будете расширять запрос дальше.

Вам нужно будет передать объект DBDataContext при вызове GetWidgetQuery ().

DBDataContext db;

Возвращает IQueryable :

var widgets = GetWidgetQuery(db);

С LINQ to SQL это теряет преимущество скомпилированного запроса, выполняя запрос LINQ по результатам:

var widgetsUncompiled = GetWidgetQuery(db).Where(u => u.SomeField.HasValue); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...