вы не можете касаться пользовательского интерфейса из фонового потока, поэтому вам нужно переместить эту строку:
listview.SetAdapter(Adapter);
for (int i = 0; i < Adapter.GroupCount; i++)
{
listview.ExpandGroup(i);
}
из RunInBackground(string[] @params)
в OnPostExecute(string result)
также переместить if_connected();
из RunInBackground(string[] @params)
- OnPostExecute(string result)
, поскольку if_connected();
показывает диалоговое окно, его нельзя запустить в фоновом режиме.
. И добавьте в свой вопрос свою полную трассировку стека, поскольку там могут быть и другие ошибки, помимо упомянутых. из них.
Я не эксперт SQL, но предполагая что оба синтаксиса:
ГДЕ (БРОСОК (CHARINDEX (@p, [Extent1]. [Имя]) интервал AS)) = 1
и
ГДЕ имя КАК @p + '%'
приведет или к сканированию таблицы или идеально к индексному сканированию. Нижняя строка они выполнят то же. Я проверил это путем просмотра планов выполнения ниже. Нижняя строка, необходимо заново продумать схему базы данных или как Ваш выполняют поиск. Это не проблема LINQ.
Одна возможная область для улучшения: обеспечьте, чтобы Вы индексировали столбец, на котором Вы ищете.
сопроводительный текст http://download.binaryocean.com/plan1.gif
сопроводительный текст http://download.binaryocean.com/plan2.gif
Ничего себе, это - действительно причудливый способ сделать его! Обратите внимание, что LINQ-SQL (в этом случае) использует LIKE @p0 + '%'
...очень странно.
Какого поставщика EF (база данных) Вы используете? SQL Server?
Как Вы говорите, хранимая процедура будет задание, но Вам не придется сделать этого... очень, очень нечетный...
"Действительно ли буква" является символом? Если Вы сделали это строкой, что происходит?
var results = (from c in companies
where c.Name.StartsWith(letter.ToString())
select c);
Я пытался использовать этот синтаксис вместо этого
Name.Substring(0, 1) == "E"
Этот SQL сгенерирован
WHERE N'E' = (SUBSTRING([Name], 0 + 1, 1))
Возможно, это более эффективно?
Это известная проблема с Linq to Entities. В отличие от LIKE, очевидно, эта конструкция не использует индексы.
У нас был некоторый успех с использованием Substring (что переводится как SUBSTRING). План выполнения аналогичен, но в нашем случае запрос выполняется гораздо быстрее.
Это еще одно «Я уверен, что это будет исправлено в EF 2» ...: - (