Здравствуйте, alex_public, Вы писали:
_>Это всё рекламные выступления. ) А вот в обсуждение по ссылке выше были уже реальные результаты. Причём не от всяких там C++'ков, а от спецов по C#, которые тоже весьма недовольны быстродействием EF.
Кстати а как заранее компилировать такие запросы
public IQueryable<TEntity> НайтиПоВхождениюВНаименование<TEntity>(paramsstring[] keywords) where TEntity : СправочникПредок
{
var predicate = PredicateBuilder.False<TEntity>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or(p => p.Наименование.Contains(temp));
}
return this.Set<TEntity>().AsExpandable().Where(predicate);
}
И использовать
var бд = Константы1С.ГлобальныйКонтекст.БД;
var запрос = бд.НайтиПоВхождениюВНаименование<Справочник.Номенклатура>("Linq", "Наше", "Все").Select(товар => товар.Наименование);
foreach (var товар in запрос)
{
Console.WriteLine("{0} ", товар);
}
Генерируется следующий запрос
SELECT
[Extent1].[DESCR] AS [DESCR]
FROM [dbo].[SC84] AS [Extent1]
WHERE ([Extent1].[DESCR] LIKE @p__linq__0 ESCAPE N'~')
OR([Extent1].[DESCR] LIKE @p__linq__1 ESCAPE N'~')
OR([Extent1].[DESCR] LIKE @p__linq__2 ESCAPE N'~')
Поясню. Есть обобщенная функция с ограничением на СправочникПредок в котором есть свойство Номенклатура в которую подается список строк.
Запрос возвращает все элементы которые содержат в наименовании любую строку из списка