Я использую MVC4 с Entity Framework 5 для проекта. У нас есть мастер-таблица с именем MAIN_TABLE
и имеют несколько дочерних таблиц (то есть: CHILD_TABLE1
, CHILD_TABLE2
, и т.д ..)LINQ и EF Slow
Мы столкнулись с проблемой скорости выполнения запросов LINQ из нескольких опции фильтра в этих различных таблицах ребенка.
Мне нужно написать запрос для фильтрации данных из Модели с использованием EF5. Прямо сейчас мы закодированы на основе одного фильтра за раз. Т.е. мы проверяем каждый отфильтрованный столбцы и запускаем запрос. Но это слишком медленно. Есть ли другой вариант?
string[] strValue = filter_Values;
foreach (SelectedData selectedData in objSelectedDataCollection.DataCollection)
{
switch (selectedData.ColumnName) // This is the column name in the GridView defined
{
case "Outlook":
indlist = from jd in indlist
where jd.IND_APP_PASS_STATUS.Any(
ob => strValue.Contains(ob.Outlook))
orderby jd.Indman_ID
select jd;
break;
case "RS_TP":
indlist = from jd in indlist
where jd.IND_APP_PASS_STATUS.Any(
ob => strValue.Contains(ob.RS_TP))
orderby jd.Indman_ID
select jd;
break;
case "Code":
indlist = (from jd in indlist from jk in jd.IND_APP_PASS_STATUS where strValue.Contains(jk.Code) select jd).ToList();
break;
}
}
Хмм не 'string.Contains()' фактически выполняется на вашем конце, а не на стороне SQL-сервера? Кто угодно? Если это так, то почему это медленно – MickyD
Используйте профайлер SQL, чтобы узнать, какой запрос отправляется в механизм базы данных. Возможно, вам придется писать SQL вручную вместо использования EF, если вам нужно оптимизировать запрос. – JNYRanger
@MickyDuncan, Linq To Entities преобразует 'strValue.Contains' в соответствующий SQL' IN (...) 'оператор. – haim770