Переводится ли выражение LINQ to Entities с экземпляром контекста внутреннего объекта в последовательность запросов клиент-сервер SQL? - PullRequest
1 голос
/ 22 сентября 2010

У меня есть выражение ADO.NET EF, например:

db.Table1.Select(
  x => new { ..., count = db.Table2.Count(y => y.ForeignKey.ID == x.ID) })

Правильно ли я понимаю, что он переведен в несколько запросов клиент-сервер SQL и может быть реорганизован для повышения производительности?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

Да - выражение будет переведено (наилучшим образом) в запрос SQL.

И, как и любой запрос T-SQL, выражение запроса EF (или L2SQL) может быть реорганизовано для повышения производительности.

Почему бы не запустить SQL Profiler в фоновом режиме, чтобы увидеть, что он выполняется, и сначала попытаться оптимизировать необработанный T-SQL, что поможет оптимизировать выражение.

Или, если у вас LinqPad , просто оптимизируйте запрос T-SQL и попросите LinqPad написать ваш запрос для вас.

Кроме того, я не совсем уверен, почему вы указали делегата для выражения Count ().

Вы можете просто сделать это:

var query= from c in db.Table1
                  select new { c.CustomerID, OrderCount = c.Table2s.Count() };
1 голос
/ 22 сентября 2010

Ответ НЕТ - этот запрос будет преобразован в один запрос клиента к СУБД .

RPM1984 рекомендуется использовать LinqPad. LinqPad показал, что запрос будет переведен в очень простое выражение SQL. Подход с группировкой будет переведен в другое выражение SQL, но все равно будет выполнен в одном запросе.

...