Различия между запросами, использующими интерфейс LINQ и IQueryable напрямую? - PullRequest
1 голос
/ 01 января 2011

Используя Entity Framework 4 и учитывая:

ObjectSet<Thing> AllThings = Context.CreateObjectSet<Thing>;

public IQueryable<Thing> ByNameA(String name)
{
    IQueryable<Thing> query =  from o in AllThings 
                               where o.Name == name 
                               select o;
    return query;
}

public IQueryable<Thing> ByNameB(String name)
{
    return AllThings.Where((o) => o.Name == name);
}

Оба возвращают экземпляры IQueryable <>, и, таким образом, запрос не попадает на сервер, пока не будет вызвано что-то вроде ToList(), верно?Разница заключается только в удобочитаемости, или в бэкэнде используются принципиально разные технологии?

1 Ответ

1 голос
/ 01 января 2011

Они компилируются в почти идентичный код.

Первый синтаксис переводится компилятором напрямую в методы с именами, указанными во втором синтаксисе.

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

...