2012-06-02 2 views
0

Есть ли разница в производительности между двумя запросами?Linq to SQL самый быстрый способ получить одну запись

CustomerProduct customerProduct = db.CustomerProducts.SingleOrDefault(p => object.Equals(p.Customer, this)); 

CustomerProduct customerProduct = (from p in db.CustomerProducts where object.Equals(p.Customer, this) select p).SingleOrDefault(); 

Возможно, есть еще один, даже более быстрый?

+1

Вы пытались сравнить фактические SQL-запросы? – Snowbear

ответ

1

С точки зрения компиляции они должны быть скомпилированы в один и тот же код; Linq - это просто синтаксический сахар, который компилятор будет интерпретировать для вас. При этом не все запросы linq будут скомпилированы так, как вы ожидаете, и независимо от того, вы всегда должны проверять сгенерированный sql, используя метод ObjectQuery cast + ToTraceString.

+1

Или, если вы используете SqlServer, вы можете использовать Sql Profiler для проверки отправляемого запроса. – Skyrim

+0

Будет ли это означать, что сравнение атрибута из строки в таблице A для извлечения строк из таблицы B будет таким же, как выполнение объединения в этих таблицах с данным атрибутом? У меня есть что-то вроде этого, мне нужно реализовать в ближайшем будущем и думал: «О, мне придется писать SQL для этого запроса, потому что цикл по обеим таблицам будет неэффективным». – evanmcdonnal

+1

@evanmcdonnal Хм ... Я не уверен, что понимаю, что вы имеете в виду. Позвольте мне попытаться ответить таким образом: если вы делаете фактический sql-запрос, и это связано с объединением, вы можете (в большинстве случаев) преобразовать его в запрос linq, включая это (внутреннее/внешнее) соединение. Таким образом, вам не нужно было бы делать сравнения в памяти. – Skyrim

Смежные вопросы