Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?
using (var entities = new Entities(dbFolder.EfConnStr))
{
var objItems = new string[] { "a1", "a2", "a3", "a4" };
var query = from obi in objItems
where !entities.DbItems.Any(dbi => obi == dbi.Name)
select obi;
// Обломvar sql = ((ObjectQuery)query).ToTraceString();
}
Здравствуйте, Doc, Вы писали:
I>>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010?
Doc>1) Для ASP.NET есть http://miniprofiler.com/ Doc>2) Для остального есть профайлеры SQL
Не нашел подходящего ничего для SQL Server Express 2008
Здравствуйте, TK, Вы писали:
I>>Такой вот mix из Linq-to-Entities и Linq-to-Objects. Как сделать сабж на VS2010? TK>У вас выборка идет из массива. Откуда тут будут Entities и Sql?
Да, я понимаю это Но можно как-нибудь вывернуть это наизнанку, перехватить генерацию SQL EF-контекстом или еще каким-нибудь другим образом на стороне программы, а не на стороне SQL-сервера посмотреть, что будет запрашиваться при помощи SQL?
Кстати, по ходу вопрос, материализация при таком использовании EF-контекста (в предикатах Linq-to-Objects) происходит вообще?
Эх, хорошая, наверное, штука. Всего $5, опять же. А трайала нет.
А со стороны программы, а не со стороны sql БД, можно как-нибудь увидеть вышеуказанный SQL? Проанализировать, что LINQ там вообще такое вытворяет?
Здравствуйте, Ilinichev, Вы писали:
I>Да, я понимаю это Но можно как-нибудь вывернуть это наизнанку, перехватить генерацию SQL EF-контекстом или еще каким-нибудь другим образом на стороне программы, а не на стороне SQL-сервера посмотреть, что будет запрашиваться при помощи SQL?
На этапе откладки можно смотреть в IntelliTrace — там будет SQL отправляемый в БД
I>Кстати, по ходу вопрос, материализация при таком использовании EF-контекста (в предикатах Linq-to-Objects) происходит вообще?
entities.DbItems.Any(dbi => obi == dbi.Name) вот ваш запрос к БД. Должен вы полнится по числу элементов в objItems
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
I>>Да, я понимаю это Но можно как-нибудь вывернуть это наизнанку, перехватить генерацию SQL EF-контекстом или еще каким-нибудь другим образом на стороне программы, а не на стороне SQL-сервера посмотреть, что будет запрашиваться при помощи SQL?
TK>На этапе откладки можно смотреть в IntelliTrace — там будет SQL отправляемый в БД
IntelliTrace is available in Visual Studio 2010 Ultimate but not the lesser versions.
TK>entities.DbItems.Any(dbi => obi == dbi.Name) вот ваш запрос к БД. Должен вы полнится по числу элементов в objItems
А если так, то запрос к БД выполняется один раз, верно?
using (var entities = new Entities(dbFolder.EfConnStr))
{
var objItems = new string[] { "a1", "a2", "a3", "a4" };
var dbQuery = from dbi in entities.DbItems
where objItems.Contains(dbi.Name)
select dbi;
var obQuery = from obi in objItems
join dbi in subQuery on obi equals dbi.Name
select obi;
}
Здравствуйте, Ilinichev, Вы писали:
I>А со стороны программы, а не со стороны sql БД, можно как-нибудь увидеть вышеуказанный SQL? Проанализировать, что LINQ там вообще такое вытворяет?