2010-12-31 4 views
1

Использование Entity Framework 4, и с учетом:Различия между запросами с использованием LINQ и интерфейса IQueryable напрямую?

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

Они скомпилированы почти идентичным кодом.

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

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

+0

Спасибо, думал, что может быть так, но хотел быть уверенным. – JohnMetta